《Oracle编程艺术》学习笔记(16)-事务持久性

通常情况下,事务提交后,它的改变就是持久的。即使提交后数据库崩溃,改变也永久存储到数据库中了。
但是,有2种例外情况:
1)使用COMMIT语句新增的WRITE扩展
10gR2以上版本新增特性,包括下面2种选择
· COMMIT [WORK] WRITE WAIT 等同于COMMIT,需要等待提交完成(完成向REDO日志文件的物理写入操作),即同步提交。
· COMMIT [WORK] WRITE NOWAIT 不等待提交完成即返回,物理写入操作在后台进行,即异步提交,因此不能保证持久性
同步提交下,Oracle会请求LGWR把缓冲区的REDO日志写入在线REDO日志文件,这是物理写入操作,相对来说需要花费很多时间,甚至比事务中的DML语句更花费时间。
如果是异步提交,就不需要等待物理写入完成,可以大大提高性能,特别是有大量COMMIT的时候。
异步提交只适用于那些出现故障时可以自动重启执行,即使发生已提交却未能永久存储到数据库这种情况也是可以接受的应用。比如面向批处理的应用。

2)非分布式PL/SQL代码块中执行COMMIT
PL/SQL代码块会透明的使用异步提交。PL/SQL代码块中的COMMIT语句不等待物理I/O完成,而是在最后PL/SQL返回到客户应用之前等待完成向REDO日志文件的物理写入操作,也就是不管PL/SQL代码块中有几个COMMIT,PL/SQL只等待1次。
11g之后,可以调用COMMIT WRITE WAIT来等待提交完成。

你可能感兴趣的:(《Oracle编程艺术》学习笔记(16)-事务持久性)