Oracle 同步、非同步完全檢查點

mlx_861201發表於2013-11-25

Oracle 同步、非同步完全檢查點

oracle檢查點分類

Oracle檢查點分為:全量檢查點和增量檢查點,全量檢查點分為同步全量檢查點和非同步全量檢查點。

全量檢查點

從當前(也就是最新的)重做記錄開始,LGWR將所有的重做記錄寫入到redo log 檔案中,DBWn程式將當前重做記錄之前產生的髒資料塊寫入到資料檔案中,最後CKPT將檢查點SCN寫入到資料檔案頭和控制檔案中。

同步全量檢查點優先順序高,檢查點沒有完成,命令不會返回。包括:除shutdown abort之外的其他關閉命令,以及alter system checkpoint命名。針對表空間檔案的全量檢查點命令alter tablespace offlineonlinebegin backupend backupreadonlyreadwrite,這些命令會修改對應表空間檔案的檔案頭檢查點SCN以及控制檔案中檔案SCN

非同步全量檢查點優先順序低,檢查點沒有完成(可能是沒有將redo buffer 全部寫入到redo log file、可能正在歸檔、也可能是髒資料還沒有寫入到data file )的情況下就會返回命令,比如alter systemswitch logfile(將在後續試驗中證明該命令是非同步全量檢查點)以及日誌的自動卻換。

增量檢查點

            取一條重做記錄,該重做記錄由oracle內部決定,LGWR將該重做記錄之前的資料寫入到線上日誌檔案中,DBWN將該重做日誌之前的髒資料寫入到data file中,最後CKPT程式將檢查點SCN記錄到控制檔案中。需要仔細得體會下增量檢查點與非同步全量檢查點的區別。

實驗
實驗一
目的:

證明alter system checkpoint為同步全量檢查點,alter system switch logfile為非同步全量檢查點。

過程:

1、  開啟檢查點alert資訊。

alter system set log_checkpoints_to_alert= true;

2、  監控alert檔案

tail -f alert_orcl.log

3、  檢視控制檔案檢查點SCN、檢視控制檔案檔案頭SCN、檢視檔案頭SCN

select t.NAME,t.CHECKPOINT_CHANGE#,t.CHECKPOINT_TIME,t.CHECKPOINT_COUNT from v$datafile_headert;--檔案頭檢查點scn

select t.CHECKPOINT_CHANGE#,T.CURRENT_SCN fromv$database t;--控制檔案檢查點scn

select t.NAME,t.CHECKPOINT_CHANGE#,T.LAST_CHANGE#,t.CHECKPOINT_TIME fromv$datafile t;---控制檔案檔案頭檢查點SCN

檢視控制檔案檢查點SCN、檢視控制檔案檔案頭SCN、檢視檔案頭SCN都是16341058

4、  執行alter system checkpoint

5、  檢視alert日誌資訊。

Beginning global checkpoint up to RBA [0xe7.ffd4.10],SCN: 16348837

Completed checkpoint up to RBA[0xe7.ffd4.10], SCN: 16348837

開始了一個全域性檢查點,檢查點SCN16348837,並立即返回完成檢查點,這就是同步全量檢查點。

6、再次檢視控制檔案檢查點SCN、檢視控制檔案檔案頭SCN、檢視檔案頭SCN

結果全為16348837。與alert日誌中的資訊一致。

7、執行alter system switch logfile,手動切換日誌

8、檢視alert日誌資訊

Beginning log switch checkpoint up to RBA [0xe8.2.10],SCN: 16348963

Thread 1 advanced to log sequence 232 (LGWR switch)

Current log# 1 seq# 232 mem# 0:/u01/app/oracle/oradata/orcl/redo01.log

Tue May 07 22:21:32 2013

Archived Log entry 15 added for thread 1sequence 231 ID 0x4f6b0381 dest 1:

開始一個log switch 檢查點,並切換了日誌,歸檔了線上日誌檔案,檢查點沒有完成。

9、再次檢視控制檔案檢查點SCN、檢視控制檔案檔案頭SCN、檢視檔案頭SCN

結果全為16348837。沒有發生變化。

10、過了一段時間後,alert日誌自動重新整理了,

Tue May 07 22:25:54 2013

Completed checkpoint up to RBA[0xe8.2.10], SCN: 16348963

提示完成了檢查點。這就是非同步完全檢查點,並不立即返回檢查點結果。

11、再次檢視控制檔案檢查點SCN、檢視控制檔案檔案頭SCN、檢視檔案頭SCN

檢查點SCN全為16348963。這就是非同步全量檢查點,並不會立即完成檢查點,完成檢查點後會更新控制檔案和資料檔案頭的檢查點SCN

12、 檢視日誌檔案select * from v$log;

狀態為current的日誌檔案的開始SCN也是16348963

總結

                綜上所述,alter systemcheckpoint為同步全量檢查點,alter system switch logfile為非同步全量檢查點,兩者都能呼叫CKPT程式將檢查點SCN設定到控制檔案和資料檔案中。兩則區別在於,一個是立刻返回並設定檢查點SCN,一個是延遲返回並設定檢查點SCN

實驗二

增量檢查點。

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

相關文章