CUUG ORACLE檢查點講解

murkey發表於2014-01-13

徹底理解檢查點的功能、作用、原理

檢查點的實際應用

 

 

檢查點做什麼:

    通知DBWn寫髒塊

    資料檔案頭 select name ,CHECKPOINT_CHANGE# from v$datafile_header;

    控制檔案頭 select name,CHECKPOINT_CHANGE# from v$datafile;

 

檢查點號來源與SCN(System Change Number),
SCN是Oracle資料庫中用來標識事務前後順序的唯一序
列號。 

SCN是當 Oracle資料更新後,由 DBMS自動維護去累積遞增的一個數字。當

一個事務 commit時,LGWR會將 log buffer寫入 redo log file,同時也會將該事

務的 SCN同步寫入到 redo log file內(wait-until-completed)。因此當你 commit

transaction時,在成功的訊息返回之前,LGWR必須先完整的完成上述行為之

後,否則你是看不到提交成功的響應訊息。

可以理解的,返回的 SCN,也是目前 redo log file最新的 SCN 紀錄。因為

commit後的交易才會有 SCN,而一旦 commit就會立刻寫入 redo log file中。

檢查點的作用

? Checkpoints are used to determine where recovery should start
? Checkpoint position - where recovery starts
? Checkpoint queue - link list of dirty blocks

系統時間標記與 scn之間存在一張表,即 SYS下的 SMON_SCN_TIME。

每隔 5分鐘,系統產生一次系統時間標記與 scn的匹配並存入

SYS.SMON_SCN_TIME表(由 SMON程式來進行 Update操作),該表中記錄了

最近 1440個系統時間標記與 scn的匹配記錄,由於該表只維護了最近的 1440條

記錄,即最近 5天內的記錄。

 

檢視 SCN和 timestamp之間的對應關係:

select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss') from sys.smon_scn_time order

by 2;

 

查詢當前的檢查點號

select dbms_flashback.get_system_change_number from dual;

select current_scn from v$datafile;

 

轉換

select scn_to_timestamp(4082040) from dual;

select timestamp_to_scn(to_date('2011-01-25 12:10:00','yyyy-mm-dd hh24:mi:ss'))

from dual;

 

checkpoint有兩個目的:

1、確保資料一致性。

2、使資料庫能快速地恢復

 

檢查點型別:

全域性檢查點:

  關閉資料庫

增量檢查點:

  定期執行、只寫最老的塊S:

階段性的儲存操作的結果,以至於以後例項異常中斷而
不要從頭開始恢復(recovery),縮短例項恢復的時間,
類似於Word程式中設定了自動儲存功能。

部分檢查點

  和部分物件 如:TS 做檢查點

 

部分檢查點的作用
? 用來記錄表空間何時開始備份,那麼以後就從備份的點
(檢查點)開始恢復(recovery),Oracle在做備份時
總是會發生一個檢查點,用來記錄開始備份的位置

 

部分檢查點的影響
? Oracle會鎖資料檔案頭,但是不會鎖表空間,不影響
DML操作
? 把跟備份表空間相關的髒塊寫入資料檔案
? 如果是UMAN(使用者管理)備份方式,為了保證資料塊
的一致性,會把被修改的資料塊的映象寫入redolog,會
導致日誌資訊量增加

 

 

 

相關引數:

FAST_START_MTTR_TARGET 首選--建議

比如設定為60S,假定該值處於合理的情況之下,則一旦例項崩潰,在60S以內例項應當能夠被恢復。合理即該值不能太大,也不能太小。太大則例項恢復所需的時間較長,太小則導致大量資料的及時寫入,增加了系統的I/O。

FAST_START_MTTR_TARGET設定為0將關閉檢查點自動調整功能。當設定一個大於0的值給FAST_START_MTTR_TARGET,則自動調整檢查點功能將啟用。

select target_mttr,estimated_mttr from v$instance_recovery;

 

select mttr_target_for_estimate,dirty_limit,estd_cache_writes,estd_cache_write_factor,estd_total_writes,estd_total_write_factor from v$mttr_target_advice;

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

相關文章