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在处理分布式事务时,会指定一个数据库作为协调者,这个协调者在提交事务时,会询问各个数据库是否做好提交。如果每个数据库都回复确定提交,协调者告诉各个数据库进行提交。如果其他数据库有回复不可以提交,则协调者会让各个数据库进行回滚。
热门相关:官仙 废材逆袭:冰山王爷倾城妃 纨绔毒医 两个女人的海滩 功夫圣医