最近有人跟我提出乙個看似很刁鑽古怪的問題,問題是這樣的:
假設事務a修改了乙個資料塊b,b變成髒資料塊b,但是沒有提交,又因為髒資料塊寫入磁碟不受事務提交的影響,所以現在的情況是這樣的:
髒資料塊b被寫入磁碟,但是undo表空間儲存的的b修改前的資料還沒有寫入磁碟
現在出現了例項崩潰
那麼要恢復資料庫例項的時候,就沒有undo資料,試問,此時如何恢復資料庫例項?
按照這個邏輯,的確會有發生這樣的事情,為此我做了3個小時的資料尋找,終於給我找到一句可以粉碎這個問題的話了,這句話就是:
當觸發dbwr之前,會先觸發lgwr程序
看看,多麼不堪一擊的問題,髒資料寫入磁碟需要觸發dbwr程序,然後觸發寫日誌程序,只要日誌檔案寫入磁碟了,那麼回滾段、髒資料自然也會在下次例項啟動的時候前滾回來
Oracle資料庫中Undo資料段的作用及型別
undo資料段的作用 事務回滾 transaction rollback 程式執行rollback操作。事務修復 transaction recovery rollback是recovery的一部分。讀取一致 read consistency 根據scn system change number 來...
oracle資料庫和資料庫例項
oracle中的資料庫和資料庫例項 oracle的體系結構簡單來分的話,分成2部分 資料庫 database 和資料庫例項 database instance 這是個容易搞糊塗的概念,在sql server裡面,你在你的機器上安裝一次sql server,那麼你就等於安裝了一次資料庫例項,在這個例項...
資料庫undo和redo
undo和redo是沒有關係的,不能相互取代,對於資料庫來說,只有有沒有undo 和有沒有redo的區別,不是有了undo就不能有redo,或者有了redo就不能有undo。到底用不用redo和undo是和steal no steal force no force策略相關的。你肯定是沒搞明白這四個策...