oracle事务

1 事务的概念

事务是将数据库从一种一致性状态转变为另外一种一致性状态

2 事务的四个特征(ACID)

  • 原子性(Atomicity):事务的所有执行要么一起成功,要么一起失败
  • 一致性(Consistency):事务将数据从一种一致性状态转为另外一种一致性状态
  • 隔离性(Isolation):事务中所有修改未提交的数据对其他事务是不可见的
  • 持久性(Durability):事务一旦提交,数据就永久保存

2.1 DDL与原子性

DDL语句执行之前,会先自动执行一个commit,再执行DDL语句本身。

2.2 COMMIT_WAIT与持久性

oracle的持久性是依靠redo来保证的。一般情况下,commit执行时,只有数据对应的redo缓存写入到redo在线重做日志后,才会给客户端返回commit成功的信息。
COMMIT_WAIT参数有三个值WAIT、NOWAIT和FORCE_WAIT。当COMMIT_WAIT设置为NOWAIT时,commit执行时数据库无需等待redo缓存写入到redo在线重做日志,直接给客户端返回commit成功的信息。但是,这样子做,无法保证数据的持久性。因为此时commit成功,redo缓存并没有写入到redo在线重做日志。如果此时数据库突然关闭,这次修改的数据无法通过redo进行恢复。

3 分布式事务

有时候,我们会使用DBLINK联合其他服务器上的oracle数据库执行一个事务。这种分布式事务,oracle是通过2PC(Two-Phase Commit Protocol,两阶段提交协议)实现事务的原子性的。2PC原理是oracle在处理分布式事务时,会指定一个数据库作为协调者,这个协调者在提交事务时,会询问各个数据库是否做好提交。如果每个数据库都回复确定提交,协调者告诉各个数据库进行提交。如果其他数据库有回复不可以提交,则协调者会让各个数据库进行回滚。

热门相关:官仙   废材逆袭:冰山王爷倾城妃   纨绔毒医   两个女人的海滩   功夫圣医