- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于Oracle事务的总结
1.什么是事务,事务的特性是什么?
事务的任务便是使数据库从一种状态变换成为另一种状态,这不同于文件系统,它是数据库所特用的。它的特性有四个:TOM总结为ACID即原子性atomicity:语句级原子性,过程级原子性,事务级原子性一致性consistency:状态一致,同一事务中不会有两种状态隔离性isolation:事务间是互相分离的互不影响(这里可能也有自治事务)持久性durability:事务提交了,那么状态就是永久的对于语句级原子性,过程级原子性和事务级原子性可以查阅一下相关的信息
2.Oracle中的事务语句commit=commit work 提交rollback=rollback work 回滚savepoint 事务的标记点,可以使一个事务在回滚到不同的阶段set transaction 开始一个事务rollback to savepoint 与savepoint对应另外对于自治事务还有一个,下面会着重说一下关于自治事务pragma autonomous_transaction 3.关于完整性约束与事务的关系完整性约束的模式有immediate,deferred等语法:set constraint c_fk defereed这对于级联更新很有帮助,如下面的tom在书中举的例子:SQL create table p(pk int primary key);表已创建。SQL create table c 2 (fk constraint c_fk 3 references p(pk) 4 deferrable 5 initially immediate 6 ) 7 /表已创建。语句: set constraint c_fk immediate; set constraint c_fk deferred;SQL set constraint c_fk immediate;约束条件已设置。SQL update p set pk=3;update p set pk=3*ERROR 位于第 1 行:ORA-02292: integrity constraint (FTITEM.C_FK) violated - child record foundSQL set constraint c_fk deferred;约束条件已设置。SQL update p set pk=3;已更新 1 行。SQL update c set fk=3;已更新 1 行。SQL commit;提交完成。SQL set constraint c_fk immediate;约束条件已设置。4.在事务中两个不好的方法tom在书上提到了两种不好的事务使用习惯,我在工作中也是经常犯的,主要是因为对于每种数据库的认识不到位,听好多朋友说数据库你只要会用了一个其它的就可以了,经过这段时间的学习,其实我们所说的会只是说对一SQL语句等,而并不是理解,比如对于临时表的用法,在sqlserver与oracle就不太一样(我只用过这两个数据库),两个不好的方法:A:在循环中提交事务,这影响性能而且在快照(snapsot中也会有问题),还有一个是重新启动(在before update on table的触发器中会看到引用NEW,OLD会被触发两次)B:使用自动提交事务,一定要手动控制事务的提交,因为自动提交会出现不必要的麻烦。5.分布式事务在oracle中会在一个事务中控制多个数据库,保证各个数据库中的数据完整性,主要通过dblink,看到这我想到了自己在工作中的问题:两台服务器不同的数据库,我一直认为不能同时用一个事务来控制,所以在开发程序中(我用delphi开发的)我用两个connection来进行联接不同的数据库,提交时分别提交,而且需要用状态标识来进行事务是否正常,之前用sqlserver时也这样操作,现在想想笨的要死,为什么没有用到事务的特性呢?究其原因是,自己对于数据库的理解差到极点了:(在oracle中的分布式事务的限制条件:(1)只能在主服务器中进行事务的开始,提交,回滚等,其它服务器会根据状态来进行判断,即主服务器为协调各个数据库的状态一致从而使其它从数据库达到状态一致。(应该说是站点,分站点)(2)在dblink(数据链接)上不能做提交(3)在dblink(数据链接)上不能做DDL操作(4)在dblink(数据链接)不能发出savepoint等操作,即不能发出任何事务性语句这里补充一下关于数据库链接的创建删除等语法:创建数据链接:方法1.create database link dblink_name c
文档评论(0)