(一)Introduction to Transactions
1、概念理解:将一个或多个SQL语句的执行,看成是一个不可分割的任务。其执行过程要么全被提交,要么全被回滚。
2、事务有以下四个特性(ACID属性)
原子性(Atomicity)
一个事务对应的所有任务,要么全被执行,要么全被回滚。
注意事项:在实际生产过程中,一个事务会比这个复杂得多,经常会存在对一个表进行操作之前,在表上有相应的触发器,触发器可能会涉及到对其他的表进行更新、插入操作,这也算是一整个事务。如果其中一个环节出现错误,那么整个过程都应当回滚。题外话,这些地方也是最容易出现性能影响的地方,情节严重者会拖跨整个数据服务。多个平台间的耦合,如涉及到消息传递,可通过消息中间件进行实现,尽量减少通过触发器进行数据的交换,从而达到平台通信的目的。
一致性(Consistency):
一个事务,使得数据库从一种一致性状态,到另外一种一致性状态。
经典例子:在一个银行事务当中,借方储蓄账户和信用支票账户,一次事务失败不能导致信贷数据库只有一个帐户,否则将会导致不一致的数据出现。

(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,被认为是部分原子性语句。在事务提交或回滚的时候,它所对应的影响要么全部都成功,要么全部都失效。
浙公网安备 33010602011771号