檢查點機制與scn
oracle在資料庫啟動到open階段進行檢查點的檢查和完整性的檢查。
oracle中包括了幾個重要的scn資料結構:
其中有檢查點計數器checkpoint cnt(在資料檔案頭和控制檔案當中都有,是決定是否需要介質恢復的關鍵,即便是處於begin backup情況下檢查點scn凍結了,此技術器仍然是不凍結的)。
控制檔案中還包括出checkpoint scn和stop scn。
而日誌檔案包括low scn 和next scn決定了回滾時每個scn應該到哪個重日誌當中找重做記錄進行重做。
而控制檔案當中還包括low cache rba(recovery block address),指明在例項恢復或者崩潰恢復時,需要由此開始重做。應該是寫入了redo log file 還沒有完成ckpt。on disk rba則是磁碟上的最高的重做值。在恢復時應用重做應該至少到達點。這是如何讀取redo的記錄來重做的機制。
而每次事務包括一個系列的重做記錄(是對操作的描述),每個重做記錄又包括一系列的重做向量,重做向量裡面就包括了寫入回滾段事務槽,回滾段塊,以及最終資料的修改,這就可以理解如何與回滾段進行事務的控制了,記錄萬重做記錄再做最終的修改。要麼全部成功,要麼全部失敗。(特別注意:commit時,在redo stream中記錄一個提交標記表明該事務不可恢復了--回滾,而相應回滾段的內容也會有所標記)。
接上面的內容:
在控制檔案中還包括了每個資料檔案的checkpoint scn和stop scn,如果正常情況下stop scn是為null的,而在正常關閉的情況下,資料庫會執行檢查點,並且將stop scn改為和checkpoint scn相同的值。如果是非正常關閉的,那麼資料庫不會執行檢查點,此時stop scn還是為null,資料庫再次啟動時檢查出該狀況而執行例項恢復。
檢查點(checkpoint)的工作機制
檢查點分為三類:
1)區域性檢查點:單個例項執行資料庫所有資料檔案的一個檢查點操作,屬於此例項的全部髒快取區寫入資料檔案。
觸發命令:
alter system checkpoint local;
這條命令顯示的觸發一個區域性檢查點。
2)全域性檢查點:所有例項(對應並行資料伺服器)執行資料庫所有所有資料檔案的一個檢查點操作,屬於此例項的全部髒快取區寫入資料檔案。
觸發命令
alter system checkpoint global;
這條命令顯示的觸發一個全域性檢查點。單例項下全域性檢查點和區域性檢查點是一致的。
3)檔案檢查點:所有例項需要執行資料檔案集的一個檢查點操作,如使用熱備份命令alter tablespace USERS begin backup,或表空間離線命令alter tablespace USERS offline,將執行屬於USERS表空間的所有資料檔案的一個檢查點操作。(針對資料檔案的操作)
檢查點處理步驟:
1)獲取例項狀態佇列:例項狀態佇列是在例項狀態轉變時獲得,ORACLE獲得此佇列以保證檢查點執行期間,資料庫處於開啟狀態;
2)獲取當前檢查點資訊:獲取檢查點記錄資訊的結構,此結構包括當前檢查點時間、活動執行緒、進行檢查點處理的當前執行緒、日誌檔案中恢復截止點的地址資訊;
3)快取區標識:標識所有髒快取區,當檢查點找到一個髒快取區就將其標識為需進行重新整理,標識的髒快取區由系統程式DBWR進行寫操作,將髒快取區的內容寫入資料檔案;
4)髒快取區重新整理:DBWR程式將所有髒快取區寫入磁碟後,設定一標誌,標識已完成髒快取區至磁碟的寫入操作。系統程式LGWR與CKPT程式將繼續進行檢查,直至DBWR程式結束為止;
5)更新控制檔案與資料檔案。
注:控制檔案與資料檔案頭包含檢查點結構資訊。
1)資料檔案不處於熱備份方式,此時ORACLE將不知道作業系統將何時讀檔案頭,而備份複製在複製開始時必須具有檢查點SCN;
ORACLE在資料檔案頭中保留一個檢查點的記數器,在正常操作中保證使用資料檔案的當前版本,在恢復時防止恢復資料檔案的錯誤版本;即使在熱備份方式下,計數器依然是遞增的;每個資料檔案的檢查點計數器,也保留在控制檔案相對應資料檔案項中。
2)檢查SCN小於檔案頭中的檢查點SCN的時候,這表明由檢查點產生的改動已經寫到磁碟上,在執行全域性檢查點的處理過程中,如果一個熱備份快速檢查點在更新檔案頭時,則可能發生此種情況。應該注意的是,ORACLE是在實際進行檢查點處理的大量工作之前捕獲檢查SCN的,並且很有可能被一條象熱備份命令 alter tablespace USERS begin backup進行快速檢查點處理時的命令打斷。
ORACLE在進行資料檔案更新之前,將驗證其資料一致性,當驗證完成,即更新資料檔案頭以反映當前檢查點的情況;未經驗證的資料檔案與寫入時出現錯誤的資料檔案都被忽略;如果日誌檔案被覆蓋,則這個檔案可能需要進行介質恢復,在這種情況下,ORACLE系統程式DBWR將此資料檔案離線。
檢查點演算法描述:
髒快取區用一個新佇列連結,稱為檢查點佇列(實現了增量檢查點的機制)。對快取區的每一個改動,都有一個與其相關的重做值。檢查點佇列包含髒的日誌快取區,這些快取區按照它們在日誌檔案中的位置排序,即在檢查點佇列中,快取區按照它們的低重做值進行排序。需要注意的是,由於快取區是依照第一次變髒的次序連結到佇列中的,所以,如果在快取區寫出之前對它有另外的改動,連結不能進行相應變更,快取區一旦被連結到檢查點佇列,它就停留在此位置,直到將它被寫出為止。
ORACLE系統程式DBWR在響應檢查點請求時,按照這個佇列的低重做值的升序寫出快取區。每個檢查點請求指定一個重做值,一旦DBWR寫出的快取區重做值等於或大雨檢查點的重做值,檢查點處理即完成,並將記錄到控制檔案與資料檔案。
由於檢查點佇列上的快取區按照低重做值進行排序,而DBWR也按照低重做值順序寫出檢查點快取區,故可能有多個檢查點請求處於活動狀態,當DBWR寫出快取區時,檢查位於檢查點佇列前端的快取區重做值與檢查點重做值的一致性,如果重做值小於檢查點佇列前快取區的低重做值的所有檢查點請求,即可表示處理完成。當存在未完成的活動檢查點請求時,DBWR繼續寫出檢查點快取區。
演算法特點:
1)DBWR能確切的知道為滿足檢查點請求需要寫那些快取區;
2)在每次進行檢查點寫時保證指向完成最早的(具有最低重做值的)檢查點;
3)根據檢查點重做值可以區別多個檢查點請求,然後按照它們的順序完成處理。
俺是貼上過來地,希望有助於大家對checkpoint的理解
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/288166/viewspace-967628/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【體系結構】SCN與checkpoint(檢查點)
- Oracle 檢查點涉及的SCNOracle
- 【SCN】Oracle檢查scn值指令碼Oracle指令碼
- Oracle SCN健康狀態檢查Oracle
- Oracle SCN機制詳細解讀Oracle
- 深度剖析isinstance的檢查機制
- Oracle完全檢查點和增量檢查點詳解Oracle
- 【TUNE_ORACLE】Oracle檢查點(二)檢查點效能Oracle
- Innodb檢查點和redo寫盤時機
- 螞蟻SOFA系列(2) - SOFABoot的Readiness健康檢查機制boot
- 淺析Windows的訪問許可權檢查機制Windows訪問許可權
- 如何在Java服務中實現自動化的健康檢查與自愈機制Java
- 【恩墨學院】深入剖析 - Oracle SCN機制詳細解讀Oracle
- [20181203]改變檔案大小與檢查點.txt
- 【CHECKPOINT】Oracle檢查點優化與故障處理Oracle優化
- 【TUNE_ORACLE】Oracle檢查點(一)檢查點(Checkpoint)概念介紹Oracle
- 心跳檢測機制
- 【TUNE_ORACLE】Oracle檢查點(五)建立並利用Statspack定位檢查點故障Oracle
- 微信域名檢測實現機制與程式碼分享
- 揭示檢查點的祕密
- 【TUNE_ORACLE】Oracle檢查點(三)增量檢查點四個關鍵引數介紹Oracle
- JavaScript執行緒機制與事件機制JavaScript執行緒事件
- postgresql10.3 檢查點調整SQL
- postgresql 檢查點調整 checkpoint 轉SQL
- MySQL什麼是InnoDB檢查點?MySql
- SQLServer的檢查點、redo和undoSQLServer
- TensorFlow——Checkpoint為模型新增檢查點模型
- PG檢查點刷寫髒頁
- 淺談JS事件機制與React事件機制JS事件React
- 【SCN】Oracle SCN 詳細介紹Oracle
- 健康檢查,檢查啥,怎麼檢查?
- 【SCN】Oracle推薦scn命令參考Oracle
- redis健康檢查與故障轉移Redis
- Oracle:SCNOracle
- 如何解除Llama的審查機制?
- SPI機制與策略模式模式
- session與登入機制Session
- JVM結構與機制JVM
- [20200402]增量檢查點時間間隔.txt