Oracle寫日誌問題

season0891發表於2009-01-17

本文轉自:

Oracle在執行DML語句時沒有提交commit會寫入redologfile嗎?
剛看過一個資料,上面寫執行DML時會同時將舊快照和新資料分別寫入rollbackblock和redologfile。
即然沒有提交資料,為什麼還有寫redologfile,即使系統failure了也不會破壞資料庫的一致性。

答:Oracle在執行DML語句時沒有提交commit會寫入redologfile嗎?


剛看過一個資料,上面寫執行DML時會同時將舊快照和新資料分別寫入rollbackblock和redologfile。

即然沒有提交資料,為什麼還有寫redologfile,即使系統failure了也不會破壞資料庫的一致性。

沒有提交,但是REDOBUFFER日誌超過1/3,也要寫入REDOLOGFILE的,或者在發出校驗點檢查的時候.

是會將ROOLBACKBLOCK寫入回滾段

答:是會將ROOLBACKBLOCK寫入回滾段並且會把提交的資料寫入REDOLOGFILE,不過你不能指望一個非常大的事物處理一直佔滿REDOBUFFERCACHE吧,日誌BUFFER寫滿怎麼辦啊.

lgwr程式將redologbuffer的重做條目寫入到聯機重做日誌檔案

lgwr寫日誌檔案的時機有如下幾種:

1提交事務處理時(commit)
2redologbuffer的三分之一已滿時
3redologbuffer的內容超過1M時
4發生lgwr超時
5dbwr將databuffer中的髒資料寫入到資料檔案前
6日誌檔案切換時
dbwr將databuffer中的中的髒資料寫入到資料檔案中
dbwr寫資料檔案的時機有如下幾種:

1使用者程式檢查dirtybuffer是否超過上線,超過的話,該使用者程式會呼叫dbwr,寫髒資料到資料檔案
2使用者程式搜尋空閒緩衝區,如果沒有找到,該使用者程式呼叫dbwr,寫髒資料到資料檔案
3dbwr週期性喚醒,一般3秒每次
4檢查點發生。

答:即然沒有提交資料,為什麼還有寫redologfile,即使系統failure了也不會破壞資料庫的一致性。

即使**RE了,在資料庫啟動事例的時候要發出校驗,這就是REDO和UNDO,發生REDO是因為在DBWR在寫入資料檔案時,先寫入REDOLOGFILE,如果這個時候斷電重啟,則進行寫入資料檔案操作;發生UNDO是因為如果資料沒有提交,當日志滿1/3了,寫入重做日誌了,但是因為你沒有提交,它會回滾,寫的重做日誌檔案要和撤消,資料事例重啟的時候,就是資料完成完全同步的一個過程

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-541314/,如需轉載,請註明出處,否則將追究法律責任。

相關文章