oracle技术之检查点及SCN号(一)
生活随笔
收集整理的這篇文章主要介紹了
oracle技术之检查点及SCN号(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、CHECKPIONT分為三類:
1)局部CHECKPIONT:單個實例執行數據庫所有數據文件的一個CHECKPIONT操作,屬于此實例的全部臟緩存區寫入數據文件。觸發命令:SQL>alter system checkpoint local;這條命令顯示的觸發一個局部檢查點。
2)全局CHECKPIONT:所有實例(對應并行數據服務器)執行數據庫所有數據文件的一個CHECKPIONT操作,屬于此實例的全部臟緩存區寫入數據文件。觸發命令:SQL>alter system checkpoint global;這條命令顯示的觸發一個全局檢查點。
3)文件CHECKPIONT:所有實例需要執行數據文件集的一個檢查點操作,如使用熱備份命令alter tablespace USERS begin backup,或表空間脫機命令alter tablespace USERS offline,將執行屬于USERS表空間的所有數據文件的一個檢查點操作。二、CHECKPIONT處理步驟:
1)獲取實例狀態隊列:實例狀態隊列是在實例狀態轉變時獲得,ORACLE獲得此隊列以保證CHECKPIONT執行期間,數據庫處于打開狀態;
2)獲取當前CHECKPIONT信息:獲取CHECKPIONT記錄信息的結構,此結構包括當前CHECKPIONT時間、活動線程、進行CHECKPIONT處理的當前線程、日志文件中恢復截止點的地址信息;
3)緩存區標識:標識所有臟緩存區,當CHECKPIONT找到一個臟緩存區就將其標識為需要進行刷新,標識的臟緩存區由系統進程DBWR進行寫操作,將臟緩存區的內容寫入數據文件;
4)臟緩存區刷新:DBWR進程將所有臟緩存區寫入磁盤后,設置一標志,標識已完成臟緩存區至磁盤的寫入操作。系統進程LGWR與CKPT進程將繼續進行檢查,直至DBWR進程結束為止;
5)更新控制文件與數據文件。注:控制文件與數據文件頭包含CHECKPIONT結構信息。三、CHECKPIONT事件
CHECKPIONT事件是數據庫的一個很重要的內部事件,只有了解它的運行機制,才能很好的掌握數據庫的內部運行,才能很好的掌握備份與恢復,也才能在緊急的時候解決必要的問題……
CHECKPIONT事件的觸發,將使得數據庫將已經修改的數據(臟數據)寫到磁盤,同時還將修改控制文件和數據庫頭,同步它們的scn號,它的觸發條件是:當發生日志組切換的時候當符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target參數設置的時候當運行ALTER SYSTEM SWITCH LOGFILE的時候當運行ALTER SYSTEM CHECKPOINT的時候當運行alter tablespace XXX begin backup,end backup的時候當運行alter tablespace ,datafile offline的時候;運行alter tablespace、datafile offline的時候,它們存在著一定的區別:alter datafile offline:在offline、online的時候,系統將不會修改所有datafile的scnalter tablespace offline:offline的事件,就會修改scn號;在online的時候,系統也將修改該ts下的所有datafile的scn這正是為什么online datafile需要recovery,而online tablespace就不需要。
其實當檢查點發生的時候,CKPT獲取發生檢查點時對應的SCN,通知DBWn要寫到這個SCN為止,CKPT將最近一次(可能是上次也可能是上上次)DBWn成功完成寫Dirty Buffer時對應的SCN更新到控制文件和數據文件頭 (增量檢查點時不寫數據文件頭)。至此檢查點事件完成。剩下的工作就交給DBWn了。期間,CKPT檢查checkpoint queue(也就是臟塊鏈表)是否過長,如果是,則觸發DBWn,DBWn將開始工作,他將一部分臟塊寫入數據文件,從而縮短checkpoint queue。但是為了恢復過程的迅速,CKPT進程以3秒的頻率將DBWn寫的進度反應到控制文件中,就是CKPT進程每三秒鐘向控制文件寫一次DBWn的執行情況,也就是把DBWn當前剛寫完的dirty buffer對應的scn 寫入數據文件頭和控制文件。因此,可以看出,CKPT更新數據文件和控制文件,不是使用當前檢查點的scn,而是使用上一次檢查點過程中DBWn進程成功寫完成dirty buffer隊列中某個block 對應的scn 。
如果在DBWn寫dirty buffer時候,發生掉電,則恢復過程肯定是:首先從控制文件中找到,上次檢查點發生后最后成功寫入那個block塊對應的scn往后進行恢復。也就是CKPT進程在掉電前那最后一個三秒鐘輪回,向控制文件寫如的scn為恢復的前界限,往后進行恢復。
檢查點是一個數據庫事件,它把修改數據從高速緩存寫入磁盤,并更新控制文件和數據文件。
在兩種情況下,文件頭中的檢查點信息(獲取當前檢查點信息時)將不做更新: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)根據檢查點重做值可以區別多個檢查點請求,然后按照它們的順序完成處理
oracle視頻教程請關注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html
1)局部CHECKPIONT:單個實例執行數據庫所有數據文件的一個CHECKPIONT操作,屬于此實例的全部臟緩存區寫入數據文件。觸發命令:SQL>alter system checkpoint local;這條命令顯示的觸發一個局部檢查點。
2)全局CHECKPIONT:所有實例(對應并行數據服務器)執行數據庫所有數據文件的一個CHECKPIONT操作,屬于此實例的全部臟緩存區寫入數據文件。觸發命令:SQL>alter system checkpoint global;這條命令顯示的觸發一個全局檢查點。
3)文件CHECKPIONT:所有實例需要執行數據文件集的一個檢查點操作,如使用熱備份命令alter tablespace USERS begin backup,或表空間脫機命令alter tablespace USERS offline,將執行屬于USERS表空間的所有數據文件的一個檢查點操作。二、CHECKPIONT處理步驟:
1)獲取實例狀態隊列:實例狀態隊列是在實例狀態轉變時獲得,ORACLE獲得此隊列以保證CHECKPIONT執行期間,數據庫處于打開狀態;
2)獲取當前CHECKPIONT信息:獲取CHECKPIONT記錄信息的結構,此結構包括當前CHECKPIONT時間、活動線程、進行CHECKPIONT處理的當前線程、日志文件中恢復截止點的地址信息;
3)緩存區標識:標識所有臟緩存區,當CHECKPIONT找到一個臟緩存區就將其標識為需要進行刷新,標識的臟緩存區由系統進程DBWR進行寫操作,將臟緩存區的內容寫入數據文件;
4)臟緩存區刷新:DBWR進程將所有臟緩存區寫入磁盤后,設置一標志,標識已完成臟緩存區至磁盤的寫入操作。系統進程LGWR與CKPT進程將繼續進行檢查,直至DBWR進程結束為止;
5)更新控制文件與數據文件。注:控制文件與數據文件頭包含CHECKPIONT結構信息。三、CHECKPIONT事件
CHECKPIONT事件是數據庫的一個很重要的內部事件,只有了解它的運行機制,才能很好的掌握數據庫的內部運行,才能很好的掌握備份與恢復,也才能在緊急的時候解決必要的問題……
CHECKPIONT事件的觸發,將使得數據庫將已經修改的數據(臟數據)寫到磁盤,同時還將修改控制文件和數據庫頭,同步它們的scn號,它的觸發條件是:當發生日志組切換的時候當符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target參數設置的時候當運行ALTER SYSTEM SWITCH LOGFILE的時候當運行ALTER SYSTEM CHECKPOINT的時候當運行alter tablespace XXX begin backup,end backup的時候當運行alter tablespace ,datafile offline的時候;運行alter tablespace、datafile offline的時候,它們存在著一定的區別:alter datafile offline:在offline、online的時候,系統將不會修改所有datafile的scnalter tablespace offline:offline的事件,就會修改scn號;在online的時候,系統也將修改該ts下的所有datafile的scn這正是為什么online datafile需要recovery,而online tablespace就不需要。
其實當檢查點發生的時候,CKPT獲取發生檢查點時對應的SCN,通知DBWn要寫到這個SCN為止,CKPT將最近一次(可能是上次也可能是上上次)DBWn成功完成寫Dirty Buffer時對應的SCN更新到控制文件和數據文件頭 (增量檢查點時不寫數據文件頭)。至此檢查點事件完成。剩下的工作就交給DBWn了。期間,CKPT檢查checkpoint queue(也就是臟塊鏈表)是否過長,如果是,則觸發DBWn,DBWn將開始工作,他將一部分臟塊寫入數據文件,從而縮短checkpoint queue。但是為了恢復過程的迅速,CKPT進程以3秒的頻率將DBWn寫的進度反應到控制文件中,就是CKPT進程每三秒鐘向控制文件寫一次DBWn的執行情況,也就是把DBWn當前剛寫完的dirty buffer對應的scn 寫入數據文件頭和控制文件。因此,可以看出,CKPT更新數據文件和控制文件,不是使用當前檢查點的scn,而是使用上一次檢查點過程中DBWn進程成功寫完成dirty buffer隊列中某個block 對應的scn 。
如果在DBWn寫dirty buffer時候,發生掉電,則恢復過程肯定是:首先從控制文件中找到,上次檢查點發生后最后成功寫入那個block塊對應的scn往后進行恢復。也就是CKPT進程在掉電前那最后一個三秒鐘輪回,向控制文件寫如的scn為恢復的前界限,往后進行恢復。
檢查點是一個數據庫事件,它把修改數據從高速緩存寫入磁盤,并更新控制文件和數據文件。
在兩種情況下,文件頭中的檢查點信息(獲取當前檢查點信息時)將不做更新: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)根據檢查點重做值可以區別多個檢查點請求,然后按照它們的順序完成處理
oracle視頻教程請關注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html
轉載于:https://blog.51cto.com/19880614/1194644
總結
以上是生活随笔為你收集整理的oracle技术之检查点及SCN号(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VLAN安全
- 下一篇: C语言基础教程读书笔记5.2.(第五章函