异步提交(Asynchronous COMMIT)

[@more@]


异步提交(Asynchronous COMMIT)

Oracle 10g R2中引入的新特性

当一个事务提交时,the log writer (LGWR) process 负责将事务相关的所有重做从log buffer写出到Online Redo logfiles.默认的,Oracle数据库必须将重做写入磁盘才把控制权交还给客户端,这种行为导致在Commit的时候有一定的延时因为应用程序必须等待重做被写入磁盘。

在Oracle10gR2中我们可以改变commit的默认行为来实现在commit之后,控制权立刻返回给用户,而不是等待LGWR将重做写入到online redo logfile.

在这样的情况下,导致的潜在的风险是当实例Crash或是写入online redo logfile失败之后,那些被缓冲在redo log buffers中且还未被写入到online redo logfile中的已经提交事务的redo可能会丢失,会导致那些已经提交的事务不能被恢复。

如何使用Asynchronous COMMIT
你可以在以下的两个位置来改变Commit的默认行为:
1:在System or Session Level改变COMMIT_WRITE初始化参数
COMMIT_WRITE = '{IMMEDIATE | BATCH},{WAIT |NOWAIT}'

COMMIT_WRITE初始化参数选项可能的组合:
IMMEDIATE, WAIT
IMMEDIATE, NOWAIT
BATCH, WAIT
BATCH, NOWAIT

IMMEDIATE选项确保在发出Commit命令之后redo被立即写出,也就是说,发起一次I/O。
BATCH选项意味着redo首先被缓冲,并没有发起I/O,LGWR在适当的时间发起I/O批量将redo写入磁盘。
WAIT选项确保在redo没有写入Online redo logfile前不会将控制权返回,而必须等待。
NOWAIT选项指定发出Commit命令之后立即将控制权返回,而不用等待redo写入磁盘。

当没有任何选定指定时,默认是IMMEDIATE , WAIT,这同之前的数据库版本是一样的。
不能同时指定BATCH 和 IMMEDIATE,也不能同时指定WAIT 和 NOWAIT。
在初始化参数设置之后,不带任何选项的Commit语句遵照初始化参数指定的选项。

eg:
ALTER SYSTEM SET COMMIT_WRITE = IMMEDIATE, WAIT
ALTER SESSION SET COMMIT_WRITE = IMMEDIATE, NOWAIT

2:COMMIT语句中
COMMIT [WRITE [IMMEDIATE | BATCH] [WAIT | NOWAIT] ]

eg:
COMMIT WRITE BATCH WAIT
COMMIT WRITE BATCH NOWAIT

Note:
Note: The options in the COMMIT statement override the current settings in the initialization parameter.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/3907/viewspace-1010502/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/3907/viewspace-1010502/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值