搞定Oracle SCN -system change number


SCN是Oracle的內部時鍾,用來反映數據庫中所有變化,在運行過程中不斷更新。SCN種類包括:

     (1)系統當前SCN
          
 
     (2)Checkpoint SCN( 注意只會隨着檢查點的發生而被更新:但是在熱備模式下,checkpoint時該SCN不變
          a.Stop SCN(保存在控制文件中,又稱END SCN)
               實例正常運行時STOP SCN為空,當實例正常關閉時,oracle會在 控制文件中記錄下每個數據文件對應的STOP SCN號,用來再啟動時檢查控制文件中所有數據文件對應的STOP SCN號是否都 存在並且 一致,是則表示上一次實例關閉正常,所有數據文件對應的緩存數據都已同步到磁盤,故無需進行redo/undo實例恢復。否則若發現控制文件中有某數據文件對應的STOP SCN號為空,則表明上次實例關閉非正常,此次啟動要進行實例恢復。因此STOP SCN號用來判斷下次啟動時是否需要進行 實例恢復。(如果系統斷電,那么控制文件中的STOP SCN還是為空)
               SQL>select name,last_change# from v$datafile;     -- online的數據文件對應的last_change#都是空,offline的數據文件對應的last_change#有值
               SQL>shutdown immediate;
               SQL>startup mount;
               SQL>select name,last_change# from v$datafile;
      如下示例:
           
      首先通過select name,last_change# from v$datafile;查詢到test01.dbf文件存在SCN號,是因為我們將該數據文件offline了,當我們online該數據文件時,報出該數據文件需要介質恢復,直接recover該數據文件即可。重新online該數據文件就不會有問題。重新執行select name,last_change# from v$datafile;時,該數據文件對應的SCN號就沒有了。
**********************************************************************************************************************
         
 
           START SCN是我們判斷是否需要介質恢復的唯一依據,介質恢復就是更新SCN號(關機時,控制文件中的stop SCN號就是copy的數據文件中start SCN號)。          
***********************************************************************************************************************
          
 
****************************************************************************************************************
          
 
總結:1,SCN分兩大類:(1)系統當前SCN,用於記錄用戶對數據庫的所有操作;(2)checkpoint SCN,只會隨着檢查點的刷新而被更新。
          2,checkpoint SCN又分為4小類,主要用戶數據庫開機時判斷是否需要介質恢復和實例恢復。
          3,首先判斷start SCN號用於判斷開機時所有數據文件的一致性;stop SCN號用於判斷是否正常關機(實例恢復);datafile checkpoint SCN號用於判斷數據文件和控制文件的一致性;system checkpoint SCN用於判斷控制文件自身的一致性。
 
補充:數據庫open階段,除了檢查SCN外,還會檢查一個數據,即檢查點計數(Checkpoint CNT),而且這個檢查點計數要第一個檢查。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM