日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
Oracle SCN機制的詳細解析

Oracle SCN(System Chang Number)是Oracle 中的一個十分重要機制,在相關的數據恢復、Data Guard、與Streams復制、還有RAC節(jié)點間的相關同步等各個不同功能中起著十分重要作用。

鳩江網站制作公司哪家好,找成都創(chuàng)新互聯公司!從網頁設計、網站建設、微信開發(fā)、APP開發(fā)、成都響應式網站建設公司等網站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯公司自2013年創(chuàng)立以來到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選成都創(chuàng)新互聯公司。

理解SCN的運作機制,可以幫助你更加深入地了解上述功能。

在理解Oracle SCN之前,我們先看下Oracle 事務中的數據變化是如何寫入數據文件的:

1、 事務開始;

2、 在buffer cache中找到需要的數據塊,如果沒有找到,則從數據文件中載入buffer cache中;

3、 事務修改buffer cache的數據塊,該數據被標識為“臟數據”,并被寫入log buffer中;

4、 事務提交,LGWR進程將log buffer中的“臟數據”寫入redo log file中;

5、 當發(fā)生checkpoint,CKPT進程更新所有數據文件的文件頭中的信息,DBWn進程則負責將Buffer Cache中的臟數據寫入到數據文件中。

經過上述5個步驟,事務中的數據變化最終被寫入到數據文件中。但是,一旦在上述中間環(huán)節(jié)時,數據庫意外宕機了,在重新啟動時如何知道哪些數據已經寫入數據文件、哪些沒有寫呢(同樣,在DG、streams中也存在類似疑問:redo log中哪些是上一次同步已經復制過的數據、哪些沒有)?SCN機制就能比較完善的解決上述問題。

SCN是一個數字,確切的說是一個只會增加、不會減少的數字。正是它這種只會增加的特性確保了Oracle 知道哪些應該被恢復、哪些應該被復制。

總共有4中SCN:系統(tǒng)檢查點(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記錄,同時,系統(tǒng)為其提供一個***的Oracle SCN(通過函數dbms_flashback.get_system_change_number可以知道當前的***SCN),記錄在該條記錄中。

如果該條記錄是在redo log被清空(日志滿做切換時或發(fā)生checkpoint時,所有變化日志已經被寫入數據文件中),則其SCN被記錄為redo log的low SCN。以后在日志再次被清***寫入的redo記錄中SCN則成為Next SCN。

當日志切換或發(fā)生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都不會被更新。

那系統(tǒng)是如何產生一個***的SCN的?實際上,這個數字是由當時的timestamp轉換過來的。每當需要產生一個***的Oracle SCN到redo記錄時,系統(tǒng)獲取當時的timestamp,將其轉換為數字作為SCN。我們可以通過函數SCN_TO_TIMESTAMP(10g以后)將其轉換回timestamp:

 
 
 
  1. SQL> select dbms_flashback.get_system_change_number, 
    SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;  
  2. GET_SYSTEM_CHANGE_NUMBER SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER)  
  3. 2877076756 17-AUG-07 02.15.26.000000000 PM  

也可以用函數timestamp_to_scn將一個timestamp轉換為SCN:

 
 
 
  1. SQL> select timestamp_to_scn(SYSTIMESTAMP) as scn from dual;  
  2. SCN  
  3. 2877078439  

***,SCN除了作為反映事務數據變化并保持同步外,它還起到系統(tǒng)的“心跳”作用——每隔3秒左右系統(tǒng)會刷新一次系統(tǒng)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是否相同。如果發(fā)現有不同,就從Redo Log中找到丟失的SCN,重新寫入數據文件中進行恢復。具體的數據恢復過程這里就不再贅述。

SCN作為Oracle 中的一個重要機制,在多個重要功能中起著“控制器”的作用。了解SCN的產生和實現方式,幫助DBA理解和處理恢復、DG、Streams復制的問題。

***提一句,利用Oracle SCN機制,在Oracle 10g、11g中又增加了一些很實用的功能——數據庫閃回、數據庫負載重現等。

【編輯推薦】

  1. Oracle 存取LONG類型字段的方案描述
  2. Oracle 并發(fā)連接數的設置方案
  3. Oracle 權限分類及其具體內容
  4. Oracle 數據庫進行企業(yè)開發(fā)方案之錯誤排查
  5. Oracle 創(chuàng)建表空間所用代碼示例

當前題目:Oracle SCN機制的詳細解析
當前路徑:http://m.5511xx.com/article/dpesipo.html