對於增量檢查點工作原理的理解

winston_DBA發表於2015-04-02

一、理解幾個概念:
檢查點佇列是什麼:
資料緩衝池中髒塊佇列
佇列的髒塊隊尾的增長由伺服器程式來維護
佇列的使用者為DBWn,即DBWn不斷的去讀取檢查點佇列,並將髒塊寫入資料檔案中
佇列裡有個比較重要的概念:檢查點位置,由CKPT來維護

checkpoint position是什麼:
檢查點位置( checkpoint position),由CKPT來維護,CKPT不斷的去檢視DBWn的寫入進度,如果此次看到的DBWn寫入的最後一塊已經寫入資料檔案的資料塊和上次看到的不一致,說明CKPT從上次檢查到這次檢查期間,DBWn又寫了一些髒塊到資料檔案中,這時候要維護checkpoint position,更新為指向DBWn最後一次寫入資料檔案的資料塊。
綜上:檢查點位置可以保證的是:檢查點位置之前的髒塊都已經寫入資料檔案,之後的髒塊都還沒有寫入資料檔案。

DBWR的工作內容:
不斷的將檢查點佇列裡的髒塊按照順序寫入資料檔案中,寫入之前需要去看自己的RBA指向的redo log是否寫入online redo log中,只有RBA指向的redo log塊已經成功寫入online redo log,才能繼續完成資料塊的寫入。

LGWR的工作內容:
不斷的將redo log buffer裡的資料寫入online redo log中。

CKPT的工作內容:
官方文件介紹:
1.The checkpoint process (CKPT) updates the control file and data file headers with checkpoint information and signals DBWn to write blocks to disk. 
2.Checkpoint information includes the checkpoint position, SCN, location in online redo log to begin recovery, and so on. 
3.CKPT does not write data blocks to data files or redo blocks to online redo log files.
即:
1.檢查點程式更新控制檔案和資料檔案頭部的檢查點資訊,並且通知DBWn將資料塊寫入磁碟中。
2.檢查點資訊包括檢查點位置,SCN,online redo log裡開始例項恢復的地方,等等。
3.檢查點程式是不會直接寫資料檔案或者線上重做日誌檔案的。
個人理解:
定期去檢視DBWR的寫入進度,即看DBWR已經完成了哪些髒塊的寫入,並維護checkpoint position。
理解重點:DBWR在寫入髒塊前,會去觸發LGWR對該塊的日誌的寫入,確保該髒塊相關聯的redo log一定已經寫入redo日誌。

二、若資料庫例項崩潰,例項恢復期間所做的內容:
恢復的起點:控制檔案中記錄的最新的RBA指向的online redo log記錄。
恢復的終點:online redo log檔案最後寫入的redo log塊的最後一條記錄。
恢復的過程:將恢復起點到終點之間的redo記錄重新執行一遍。




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

相關文章