oracle內部原理_如何修改block資料塊大體流程_checkpoint

wisdomone1發表於2013-04-18

使用者修改一個資料塊的流程:
1,先把資料塊自磁碟或資料檔案讀入buffer cache
2,先生成重作記錄,並記入log buffer中(當使用者提交這個修改資料塊事務時)
  一併把對應的重作記錄(此時還在log buffer)寫入到日誌檔案
3,在buffer cache中修改塊
4,把buffer cache這個塊的標誌設定為髒;同時在buffer cache的檢查點佇列
  末尾增加一個新節點,記錄這個新髒塊的資訊:即此髒塊在buffe cache
  的地址,以及此髒塊產生的redo record的rba
5,如果使用者提交事務,把相應的重作記錄從log buffer寫入到日誌檔案


6,說一個恢復或崩潰的例子,如果使用者已提交事務commit了,但buffer cache中這些事務的髒資料因為
  掉電loss,沒有來得及寫入資料檔案;怎麼辦?
  大體流程:
  1,資料庫啟動時,從控制檔案讀取檢查點位置,檢查點位置即檢查點佇列頭的位置,從這個位置開始寫入髒塊到data file
     檢查點位置記錄有重作記錄編號,透過個重作記錄編號即rba可以定位到redo中的redo record,這樣
     它讀取重作記錄的重作資料(它會是一個redo stream,即一系列change vector),即重新把操作重現一下;資料庫還是一致的

 

參考:

http://blog.chinaunix.net/uid-26762723-id-3271558.html

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

相關文章