非同步提交(Asynchronous COMMIT)
非同步提交(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Asynchronous CommitMIT
- commit 的非同步提交MIT非同步
- 非同步模式(Asynchronous)非同步模式
- Git拆分commit提交GitMIT
- 【oracle 10g R2 新特性】Asynchronous CommitOracle 10gMIT
- Git修改commit提交資訊GitMIT
- git commit提交空內容GitMIT
- 非同步 PHP:為什麼? ( Asynchronous PHP: Why?)非同步PHP
- 非同步提交非同步
- git 修改已有commit的提交日期GitMIT
- git commit未能提交指定檔案原因GitMIT
- Git 實用操作:撤銷 Commit 提交GitMIT
- Git 修改已提交的commit註釋GitMIT
- Git基於指定commit提交建立分支GitMIT
- 三階段提交(Three-phase commit)MIT
- git 刪除錯誤提交的commitGit除錯MIT
- 提交內容到版本庫:git commitGitMIT
- Git刪除錯誤提交的commitGit除錯MIT
- oracle commit提交到底作了什麼OracleMIT
- imp匯入時default 按table提交,使用commit按buffer提交MIT
- 同步非同步,阻塞非阻塞非同步
- 非同步、同步、阻塞、非阻塞非同步
- 同步、非同步、阻塞、非阻塞非同步
- docker通過commit命令提交一個映象DockerMIT
- git撤銷某一次commit提交GitMIT
- 同步非同步 與 阻塞非阻塞非同步
- 理解阻塞、非阻塞、同步、非同步非同步
- 同步、非同步,阻塞、非阻塞理解非同步
- 同步、非同步、阻塞與非阻塞非同步
- 同步、非同步、阻塞和非阻塞非同步
- Oracle的非同步commit設定Oracle非同步MIT
- 132 SVN提交報錯"Commit blocked by pre-commit hook"的解決辦法MITBloCHook
- 建立沒有commit提交歷史的新分支MIT
- 優雅的提交你的 Git Commit MessageGitMIT
- [轉]阻塞/非阻塞與同步/非同步非同步
- 同步與非同步 阻塞與非阻塞非同步
- mysql 5.5 lock tables與隱式事務提交commitMySqlMIT
- Git提交規範中,常見的commit型別GitMIT型別