完全檢查點 (normal checkpoint)
完全檢查點工作過程
一個checkpoint操作可以分成三個不同的階段:
第一階段,checkpoint程序開始一個checkpoint事件,並記錄下checkpoint RBA,這個通常是當前的RBA。
第二階段,checkpoint程序通知DBWn程序將所有checkpoint RBA之前的buffer cache裡面的髒塊寫入磁碟。
確定髒塊都被寫入磁碟以後進入到第三階段,checkpoint程序將checkpoint資訊(SCN)寫入/更新資料檔案和控制檔案中。
更新SCN的操作由CKPT程序完成,在Oracle 8.0之後CKPT程序預設是被啟用的,如果CKPT程序沒有啟用的話那相應的操作將由LGWR程序完成。
什麼時候發生normal checkpoint
下面這些操作將會觸發checkpoint事件:
日誌切換,通過ALTER SYSTEM SWITCH LOGFILE。
DBA發出checkpoint命令,通過ALTER SYSTEM checkpoint。
對資料檔案進行熱備時,針對該資料檔案的checkpoint也會進行,ALTER TABLESPACE TS_NAME BEGIN BACKUP/END BACKUP。
當執行ALTER TABLESPACE/DATAFILE READ ONLY的時候。
SHUTDOWN命令發出時。
特別注意:
日誌切換會導致checkpoint事件發生,但是checkpoint發生卻不會導致日誌切換。
日誌切換觸發的是normal checkpoint,而不是大家所說的增量checkpoint,只不過log switch checkpoint的優先順序非常低,當一個log switch checkpoint發生的時候它並不會立即的通知DBWn程序去寫資料檔案,但是當有其它原因導致checkpoint或者是寫入資料檔案的RBA超過log switch checkpoint的checkpoint RBA的時候,這次的log switch checkpoint將會被標記成完成狀態,同時更新控制檔案和資料檔案頭。我們隨後可以做個實驗驗證這個說法。
checkpoint和SCN有什麼關係?
在Oracle中SCN相當於它的時鐘,在現實生活中我們用時鐘來記錄和衡量我們的時間,而Oracle就是用SCN來記錄和衡量整個Oracle系統的更改。
Oracle中checkpoint是在一個特定的“時間點”發生的,衡量這個“時間點”用的就是SCN,因此當一個checkpoint發生時SCN會被寫入檔案頭中以記