oracle事务简述

一、事务的概念

事务会把数据库从一种一致状态转变为另一种一致状态,这就是事务的任务。

oracle的事务提供了ACID特征:

原子性(atomicity):事务中的所有动作要么都发生,要么都不发生。

一致性(consistency):事务将数据库从一种一致状态转变为下一种一致状态。

隔离性(isolation):一个事务的影响在该事务提交前对其他事务都不可见。

持久性(durability):事务一旦提交,其结果就是永久性的。

其中最重要的特性是它的原子性。

二、事务控制语句

一定要显式地使用commit或rollback来终止你的事务。

commit:要想使用这个语句的最简形式,只需发出commit。也可以更详细一些,写为commit work,不过这二者是等价的。commit会结束你的事务,并使得已做的所有修改成为永久性的(持久保存)。commit语句还有一些扩展用于分布式事务中。利用这些扩展,允许增加一些有意义的注释为commit加标签(对事务加标签),以及强调提交一个可疑的分布式事务。

rollback:要想使用这个语句的最简形式,只需发出rollback。同样地,你也可以罗嗦一些,写为rollback work,但是二者是等价的。回滚会结束你的事务,并撤销正在进行的所有未提交的修改。为此要读取存储在回滚段/undo段中的信息,并把数据库块恢复到事务开始之前的状态(后面我将把回滚段/undo段统称为undo段,Oracle 10g中都喜欢用这个词)。

savepoint:savepoint允许你在事务中创建一个“标记点”(marked point),一个事务中可以有多个savepoint。

rollback to :这个语句与savepoint命令一起使用。可以把事务回滚到标记点,而不回滚在此标记点之前的任何工作。所以,可以发出两条update语句,后面跟一个savepoint,然后又是两条delete语句。如果执行delete语句期间出现了某种异常情况,而且你捕获到这个异常,并发出rollback to savepoint命令,事务就会回滚到指定的savepoint,撤销delete完成的所有工作,而update语句完成的工作不受影响。

set transaction:这条语句允许你设置不同的事务属性,如事务的隔离级别以及事务是只读的还是可读写的。使用手动undo管理时,还可以使用这个来指示事务使用某个特定的undo段,不过不推荐这种做法。

最常用的控制语句就是commit和rollback。savepoint语句的用途有点特殊。oracle在内部频繁地使用了这个语句,你会发现这语句在你的应用中可能也有用。
继续阅读oracle事务简述