深入淺出-檢查點scn

dotaddjj發表於2011-11-17

最近又開始重新檢視eygle的深入淺出了,大師的書籍確實值得一讀再讀,這裡摘要下大師的第一張資料庫啟動關閉的一些個人覺得需要細細理解的知識點。

checkponit cntopen狀態檢驗

我們說過:當我們使用file_hdrs事件來轉儲資料檔案頭資訊時,Oracle會轉儲兩部分資訊,一部分來自控制檔案,一部分來自資料檔案,在資料庫啟動過程中,這兩部分資訊要用來進行啟動驗證。

在資料庫open的過程中,Oracle要進行檢查中包含以下兩個過程:

第一次檢查資料檔案頭中的Checkpoint cnt是否與對應控制檔案中的Checkpoint cnt一致.

如果相等,進行第二次檢查.

第二次檢查資料檔案頭的開始SCN和對應控制檔案中的結束SCN是否一致如果結束SCN等於開始SCN,則不需要對那個檔案進行恢復.

對每個資料檔案都完成檢查後,開啟資料庫.同時將每個資料檔案的結束SCN設定為無窮大.同樣正常關閉資料庫時,stop scn和資料檔案頭的啟動scn一致,如果意外關閉不進行檢查點,則控制檔案中記錄的資料檔案stop scn將無限大。

scnoracle資料庫的內部時鐘機制,oracle透過scn來維護資料庫的一致性,維護oracle的恢復機制。

這裡個人說一下資料庫例項恢復起始點和終止點是low cache rbaon disk rba,也就是上一次檢查點寫進控制檔案中的low cache rba(記錄的是上次檢查點時將dirty寫進disk時的rbarba上由日誌檔案序號,資料檔案序號和日誌記錄偏移量組成, 其實資料檔案頭也記錄了rba,當丟失了ctl時,資料檔案就是根據檔案頭的rba開始執行恢復的,也就是dbwn的寫出進度),而on disk rbalgwr寫到disk上的rba,也就是lgwr的進度,而檢查點就是為了減少恢復的時間。

CKPT每三秒會在控制檔案中記錄檢查點的位置,以表示Instance Recovery時開始恢復的日誌條目,這個概念稱為檢查點的心跳heartbeat),ckpt是有心跳,每三秒會更新ctl中的mount id,當執行檢查點,dbwr從檢查點佇列按照low rba順序寫出,ckpt程式使用非常輕量級的控制檔案更新協議,將當前的對地rba寫入控制檔案,而增量檢查點則是透過fast-start checkpoint特性實現。)

資料檔案頭 控制檔案 日誌檔案 資料塊頭 事務表中都存在scnscn隨時間而改變,但是可能並不連續,除非重建資料庫,不然scn不可能為0

select dbms_flashback.get_system_change_number from dual--獲得資料庫當前或相近的scn

--系統當前的scn並不是在任何資料庫操作都會發生變化,scn通常在事務提交或回滾改變

1 資料檔案頭部包含了該資料檔案的checkpoint scn,表示資料檔案最近一次執行檢查點操作的scn

alter session set events 'immediate trace name file_hdrs level 10';--轉儲資料檔案頭

2 日誌檔案中包含了Low scnNext scn

Low scnNext scn這兩個SCN表示該日誌介於Low scnNext scn的重做資訊,對於current的日誌檔案,其最終的scn不可知,也就無窮大了

alter system dump logfile '' --dump日誌的方式轉儲

檢查點實際上只是一個資料事件,存在的原因在於減少崩潰恢復的時間

select * from v$instance_recovery

estimated_mttr根據基於Dirty Buffer的數量和日誌快得出,此時資料庫崩潰恢復的時間為estimated_mttr

writes_autotune欄位值就是由於自動調整檢查點執行的寫出次數,而ckpt_block_writes則是由於檢查點寫出的blocks數量

target_mttr代表期望的平均恢復事件,通常該引數應該等於fast_start_mttr_target引數設定值。當estimated_mttr接近或超過fast_start_mttr_target(v$instance_recovery target_mttr)時,將觸發檢查點,執行寫出之後,系統恢復資訊將會重新計算。

可能會出現estimated_mttr>target_mttr,可能是dbwr忙於寫出,或checkpoint不能及時完成情況,以上來自oracle9I

--oracle10g中資料庫可以實現自動調整的檢查點,使用自動調整的檢查點,oracle可以利用系統的低I/O負載段寫出記憶體中的髒資料,從而提高資料庫效能,即使設定不合理oracle也可以將clash recovery時間控制在合理的範圍

fast_start_mttr_target引數未設定,自動檢查點調整生效。如果必須嚴格控制例項和節點資訊恢復時間,那麼可以設定fast_start_mttr_target為期望時間,如果恢復時間不嚴格控制,那麼可以不設定fast_start_mttr_target,讓oracle自動檢查點調整特性

[@more@]

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

相關文章