1. 程式人生 > >完全檢查點 (normal checkpoint)

完全檢查點 (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會被寫入檔案頭中以記