<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    CONAN ZONE

    你越掙扎我就越興奮

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      0 Posts :: 282 Stories :: 0 Comments :: 0 Trackbacks
    中科院信息工程碩士學位,分別在深圳華為、北京兆維2年和4年的工作經驗,主要負責IT開發和企業解決方案,包括項目管理、設計、實施在IT基礎架構及SOA解決方案領域;在倉儲物流、零售業RFID應用、旅游及電子商務領域有實際工作經驗。


    SCN(System Chang Number)作為oracle中的一個重要機制,在數據恢復、Data Guard、Streams復制、RAC節點間的同步等各個功能中起著重要作用。理解SCN的運作機制,可以幫助你更加深入地了解上述功能。

    在理解SCN之前,我們先看下oracle事務中的數據變化是如何寫入數據文件的:
     
    1、事務開始;
    2、在buffer cache中找到需要的數據塊,如果沒有找到,則從數據文件中載入buffer cache中;
    3、事務修改buffer cache的數據塊,該數據被標識為“臟數據”,并被寫入log buffer中;
    4、事務提交,LGWR進程將log buffer中的“臟數據”寫入redo log file中;
    5、當發生checkpoint,CKPT進程更新所有數據文件的文件頭中的信息,DBWn進程則負責將Buffer Cache中的臟數據寫入到數據文件中。
     
    經過上述5個步驟,事務中的數據變化最終被寫入到數據文件中。但是,一旦在上述中間環節時,數據庫意外宕機了,在重新啟動時如何知道哪些數據已經寫入數據文件、哪些沒有寫呢(同樣,在DG、streams中也存在類似疑問:redo log中哪些是上一次同步已經復制過的數據、哪些沒有)?SCN機制就能比較完善的解決上述問題。
     
    SCN是一個數字,確切的說是一個只會增加、不會減少的數字。正是它這種只會增加的特性確保了Oracle知道哪些應該被恢復、哪些應該被復制。
     
    總共有4中SCN:系統檢查點(System Checkpoint)SCN、數據文件檢查點(Datafile Checkpoint)SCN、結束SCN(Stop SCN)、開始SCN(Start SCN)。其中其面3中SCN存在于控制文件中,最后一種則存在于數據文件的文件頭中。
    在控制文件中,System Checkpoint SCN是針對整個數據庫全局的,因而之存在一個,而Datafile Checkpoint SCN和Stop SCN是針對每個數據文件的,因而一個數據文件就對應在控制文件中存在一份Datafile Checkpoint SCN和Stop SCN。在數據庫正常運行期間,Stop SCN(通過視圖v$datafile的字段last_change#可以查詢)是一個無窮大的數字或者說是NULL。
     
    在一個事務提交后(上述第四個步驟),會在redo log中存在一條redo記錄,同時,系統為其提供一個最新的SCN(通過函數dbms_flashback.get_system_change_number可以知道當前的最新SCN),記錄在該條記錄中。如果該條記錄是在redo log被清空(日志滿做切換時或發生checkpoint時,所有變化日志已經被寫入數據文件中),則其SCN被記錄為redo log的low SCN。以后在日志再次被清空前寫入的redo記錄中SCN則成為Next SCN。
     
    當日志切換或發生checkpoint(上述第五個步驟)時,從Low SCN到Next SCN之間的所有redo記錄的數據就被DBWn進程寫入數據文件中,而CKPT進程則將所有數據文件(無論redo log中的數據是否影響到該數據文件)的文件頭上記錄的Start SCN(通過視圖v$datafile_header的字段checkpoint_change#可以查詢)更新為Next SCN,同時將控制文件中的System Checkpoint SCN(通過視圖v$database的字段checkpoint_change#可以查詢)、每個數據文件對應的Datafile Checkpoint(通過視圖v$datafile的字段checkpoint_change#可以查詢)也更新為Next SCN。但是,如果該數據文件所在的表空間被設置為read-only時,數據文件的Start SCN和控制文件中Datafile Checkpoint SCN都不會被更新。
     
    那系統是如何產生一個最新的SCN的?實際上,這個數字是由當時的timestamp轉換過來的。每當需要產生一個最新的SCN到redo記錄時,系統獲取當時的timestamp,將其轉換為數字作為SCN。我們可以通過函數SCN_TO_TIMESTAMP(10g以后)將其轉換回timestamp:
     
    SQL> select dbms_flashback.get_system_change_number, SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;
     
    GET_SYSTEM_CHANGE_NUMBER
    ------------------------
    SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER)
    ---------------------------------------------------------------------------
                  2877076756
    17-AUG-07 02.15.26.000000000 PM
     
    也可以用函數timestamp_to_scn將一個timestamp轉換為SCN:
     
    SQL> select timestamp_to_scn(SYSTIMESTAMP) as scn from dual;
     
           SCN
    ----------
    2877078439
     
    最后,SCN除了作為反映事務數據變化并保持同步外,它還起到系統的“心跳”作用——每隔3秒左右系統會刷新一次系統SCN。
     
    下面,在簡單介紹一下SCN如何在數據庫恢復中起作用。
     
    數據庫在正常關閉(shutdown immediate/normal)時,會先做一次checkpoint,將log file中的數據寫入數據文件中,將控制文件、數據文件中的SCN(包括控制文件中的Stop SCN)都更新為最新的SCN。
     
    數據庫異常/意外關閉不會或者只更新部分Stop SCN。
     
    當數據庫啟動時,Oracle先檢查控制文件中的每個Datafile Checkpoint SCN和數據文件中的Start SCN是否相同,再檢查每個Datafile Checkpoint SCN和Stop SCN是否相同。如果發現有不同,就從Redo Log中找到丟失的SCN,重新寫入數據文件中進行恢復。具體的數據恢復過程這里就不再贅述。
     
    SCN作為Oracle中的一個重要機制,在多個重要功能中起著“控制器”的作用。了解SCN的產生和實現方式,幫助DBA理解和處理恢復、DG、Streams復制的問題。
     
    最后提一句,利用SCN機制,在Oracle10g、11g中又增加了一些很實用的功能——數據庫閃回、數據庫負載重現等。
    posted on 2008-07-10 19:26 CONAN 閱讀(226) 評論(0)  編輯  收藏 所屬分類: Database
    主站蜘蛛池模板: 国产麻豆成人传媒免费观看| 亚洲AV第一成肉网| 久久免费视频网站| 国产亚洲3p无码一区二区| 一级女性全黄生活片免费看| 亚洲av高清在线观看一区二区 | 亚洲国产成人私人影院| 好男人资源在线WWW免费| 国产亚洲美日韩AV中文字幕无码成人| 无码的免费不卡毛片视频| 亚洲精品A在线观看| 国产在线观看免费av站| 亚洲男人的天堂在线播放| 又大又硬又爽又粗又快的视频免费| 97se亚洲综合在线| 免费电视剧在线观看| 亚洲精品第一国产综合亚AV| 国产人成免费视频| 久久一区二区三区免费| 亚洲AV无码久久精品成人| 国产大片免费网站不卡美女| 亚洲精品无码成人片久久不卡 | 中文字幕无码日韩专区免费| 亚洲av午夜福利精品一区人妖| 久久中文字幕免费视频| 亚洲av乱码一区二区三区 | 国产亚洲精品不卡在线| 一级毛片免费不卡在线| 亚洲精品伊人久久久久| 亚洲?V无码成人精品区日韩| 久久久久国产免费| 亚洲人片在线观看天堂无码| 亚洲七七久久精品中文国产| 免费成人在线电影| 亚洲精品无码成人片久久不卡| 2048亚洲精品国产| 无码乱肉视频免费大全合集| 欧洲亚洲综合一区二区三区| 亚洲综合一区二区国产精品| 国产成人无码a区在线观看视频免费 | 亚洲一级免费毛片|