徹底檢查點工做過程日誌
一個checkpoint操做能夠分紅三個不一樣的階段:orm
第一階段,checkpoint進程開始一個checkpoint事件,並記錄下checkpoint RBA,這個一般是當前的RBA。進程
第二階段,checkpoint進程通知DBWn進程將全部checkpoint RBA以前的buffer cache裏面的髒塊寫入磁盤。事件
肯定髒塊都被寫入磁盤之後進入到第三階段,checkpoint進程將checkpoint信息(SCN)寫入/更新數據文件和控制文件中。it
更新SCN的操做由CKPT進程完成,在Oracle 8.0以後CKPT進程默認是被啓用的,若是CKPT進程沒有啓用的話那相應的操做將由LGWR進程完成。數據
何時發生normal checkpoint生活
下面這些操做將會觸發checkpoint事件:文件
日誌切換,經過ALTER SYSTEM SWITCH LOGFILE。時間
DBA發出checkpoint命令,經過ALTER SYSTEM checkpoint。poi
對數據文件進行熱備時,針對該數據文件的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會被寫入文件頭中以記錄這個checkpoint。