(一)Introduction to Transactions

1、概念理解:将一个或多个SQL语句的执行,看成是一个不可分割的任务。其执行过程要么全被提交,要么全被回滚。

2、事务有以下四个特性(ACID属性)

原子性(Atomicity)

一个事务对应的所有任务,要么全被执行,要么全被回滚。

注意事项:在实际生产过程中,一个事务会比这个复杂得多,经常会存在对一个表进行操作之前,在表上有相应的触发器,触发器可能会涉及到对其他的表进行更新、插入操作,这也算是一整个事务。如果其中一个环节出现错误,那么整个过程都应当回滚。题外话,这些地方也是最容易出现性能影响的地方,情节严重者会拖跨整个数据服务。多个平台间的耦合,如涉及到消息传递,可通过消息中间件进行实现,尽量减少通过触发器进行数据的交换,从而达到平台通信的目的。

一致性(Consistency)

一个事务,使得数据库从一种一致性状态,到另外一种一致性状态。

经典例子:在一个银行事务当中,借方储蓄账户和信用支票账户,一次事务失败不能导致信贷数据库只有一个帐户,否则将会导致不一致的数据出现。

Description of Figure 10-1 follows

            (Figure1:事务执行过程图)

隔离性(Isolation)

一个事务,在他提交之前,对于别的事务来说它所做的操作是不可见的。

持久性(Durability)

  事务提交后,数据就被持久化到磁盘上,属于永久性的变化。

3、Structure of a Transaction

    (1)事务由一条或多条DML语句构成了,对database的一次原子性改变;

    (2)一条DDL语句构成;

4、Beginning of a Transaction

     当遇到第一条可执行的SQL语句时,事务开始;可执行的SQL语句,诸如DML、DDL、SET TRANSACTION语句等对数据库实例的调用。

5、End of a Transaction

    当用户对事务进行显示的COMMIT或ROLLBACK时,或者数据库对事务进行隐式的COMMIT或ROLLBACK时,事务结束,具体可分为以下几种情况:

   (1)用户执行没有SAVEPOINTS的显示的COMMIT,ROLLBACK时;

   (2)用户执行DDL语句,如:CREATE,DROP,RENAME OR ALTER时,数据库隐式提交事务;

   (3)用户使用客户端工具,如PL/SQL DEVELOPER 、SQLPLUS等工具时正常的退出,断开连接,数据库会隐式的提交;

   (4)用户使用客户端工具,出现不正常的中断时,数据库会隐式的回滚;如执行一个大批量操作时,时间太长,工具卡死或断网时,数据库会自动将事务进行回滚。

 另附:查询事务动态信息

SQL>  SELECT XID AS "txn id", XIDUSN AS "undo seg", XIDSLOT AS "slot",
  2      XIDSQN AS "seq", STATUS AS "txn status"
  3      FROM V$TRANSACTION;

txn id             undo seg       slot        seq txn status
---------------- ---------- ---------- ---------- ----------------
0800210049060000          8         33       1609 ACTIVE

6、Statement-Level Atomicity

     ORACLE数据库,支持语句级事务的原子性。语句级事务的原子性有如下两个特征:

    (1)执行当前语句时,不会影响其他语句的工作任务;

           例如,图Figure1中,一个事务中,有两个更新语句,如果第二个更新语句引起错误,则会回滚,那么不会影响第一个更新语句。第一个更新语句可由用户显示的提交或回滚。(有待验证)

     (2)事务回滚的效果,等同于从来没有执行过;

           例如:在执行语句对应的表上的trigger,被认为是部分原子性语句。在事务提交或回滚的时候,它所对应的影响要么全部都成功,要么全部都失效。

posted on 2014-07-30 07:07  天狼群星  阅读(542)  评论(0)    收藏  举报