7.管理重做日誌(筆記)

tonykorn97發表於2006-04-13

7.管理重做日誌

重做日誌( Redo Log)用於記錄資料庫變化,當執行DMLDDL操作時,oracle會將資料庫變化資訊記載到重做日誌中.oracle使用重做日誌的目的時在出現例程失敗或介質失敗時實現例程恢復和介質恢復.


重做日誌組(Redo Log Group)和重做日誌成員(Redo Log Member)

日誌組由一組完全相同的重做日誌檔案組成,每個日誌組至少要包含一個重做日誌檔案.如果一個日誌組包含多個重做日誌檔案,後臺程式LGWR會將相同的事務變化寫入到同一個日誌組的各個重做日誌檔案中.日誌組中的每個重做日誌檔案都被稱為日誌成員.同一個日誌組的所有日誌具有相同的日誌序列號和尺寸.

重做入口(Redo Entry)

重做入口也稱為重做記錄,由一組變化向量組成,這些變化向量包含表塊變化(塊位置,變化資料),UNDO塊變化和UNDO事務表的變化.當使用者執行事務操作(DDLDML),伺服器程式會將重做記錄寫入到重做日誌緩衝區.並最終由後臺程式LGWR將重做記錄寫入到重做日誌中.

當執行事務操作(DMLDDL),伺服器程式首先將事務變化寫入到重做日誌緩衝區,並且後臺程式LGWR最終會將重做記錄寫入到重做日誌檔案,後臺程式LGWR在以下情況下開始工作

提交事務(COMMIT)

每個三秒鐘

當重做資訊超過1M,

重做日誌緩衝區已有三分之一填滿.

DBWR程式將髒緩衝區寫入到資料檔案之前.

SCN(System Change Number)

SCN是標識資料庫變化的唯一標識號,其資料順序遞增.執行事務操作(DDLDML),系統會為每個事務變化生成相應的SCN

日誌序列號

日誌序列號是重做日誌的使用標識號,其數值也是順序遞增的.當進行日誌切換是,日誌序列號會自動增一,並將該資訊寫入到控制檔案中,

重做執行緒(Redo Thread)

重做執行緒有一組相關的重做日誌組成.對於單例程資料庫來說,只有一個重做執行緒.而對於RAC(Real Application Cluster)來說,多個例程會同時訪問資料庫,並且每個例程都有獨立的重做執行緒(重做執行緒與例程一一對應).

日誌切換是指後臺程式LGWR停止寫一個日誌組,並開始寫另一個日誌組的事件,日誌切換包括自動日誌切換和手工日誌切換兩種方式.預設情況下,當日志寫滿後,後臺程式LGWR會自動進行日誌切換.

手工日誌切換

ALTER SYSTEM SWITCH LOGFILE;

進行日誌切換時,oracle會完成以下任務.

促使後臺程式CKPT發出檢查點,從而使後臺程式CKPT將檢查點時刻SCN資訊寫入到控制檔案和資料檔案頭部,並促使後臺程式DBWR將髒緩衝區寫入到資料檔案.

當資料庫處於ARCHIVELOG模式時,日誌切換促使後臺程式ARCH將日誌組內容儲存到歸檔日誌.

檢查點(Checkpoint)是一個資料庫事件,它用於同步資料庫的所有資料檔案,控制檔案和重做日誌.當發出檢查點是, 後臺程式CKPT將檢查點時刻SCN資訊寫入到控制檔案和資料檔案頭部,並促使後臺程式DBWR將髒緩衝區寫入到資料檔案.oracle發出檢查點時,後臺程式CKPT促使後臺程式DBWR開始工作,而後臺程式DBWR又促使後臺程式LGWR開始工作.因為當發出檢查點時CKPT,DBWR,LGWR同時工作,所有資料檔案,控制檔案和重做日誌的SCN完全一致,從而使得三種資料庫檔案保持完全同步.

需要注意,當執行COMMIT操作時,只有後臺程式LGWR會將事務變化寫入到重做日誌,後臺程式DBWR只有在檢查點時刻才會將髒緩衝區資料寫入到資料檔案.出現以下情況時後臺程式CKPT會發出檢查點.

日誌切換.

關閉資料庫.(SHUTDOWN ABORT不會)

手工檢查點.(ALTER SYSTEM CHECKPOINT)

透過設定初始化引數FAST_START_MTTR_TARGET控制檢查點,該初始化引數用於指定例程恢復的最大時間(單位:).設定了FAST_START_MTTR_TARGET引數後,oracle會根據該引數自動調節檢查點.

例程恢復

例程恢復是指當出現例程失敗時由後臺程式SMON自動同步資料檔案,控制檔案和重做日誌並開啟資料庫的過程.

例程恢復的具體步驟如下:

1確定不同步的物理檔案.透過比較資料檔案,控制檔案和重做日誌的SCN,後臺程式SMON可以確定那些檔案處於不同步的狀態.

2,REDO.確定了不同步的資料檔案後,SMON會重新應用那些在資料檔案上未執行的事務操作,並且DBWR會將提交和未提交的資料寫入到資料檔案以及UNDO段上.

3,REDO之後會開啟資料庫,此時客戶應用可以訪問資料庫.

4,UNDO.在第二步之後,資料檔案既包含被提交的資料,也包含未被提交的資料.開啟資料庫後,SMON會自動使用UNDO段取消未被提交的資料.

增加日誌組:

ALTER DATABASE ADD LOGFILE ‘D:demoredo03.log’ SIZE 10M;

執行上述命令後,DEMO資料庫將增加一個尺寸為10M的新日誌組,該日誌組目前只包含一個日誌成員,其日誌組號由系統自動分配.

增加日誌組時,也可以顯式地指定日誌組的組號:

ALTER DATABASE ADD LOGFILE GROUP 4 ‘D:demoredo04.log’ SIZE 10M;

需要注意:日誌組個數不能超過永久引數MAXLOGFILES的設定.

增加日誌成員

建立日誌組時,至少要為日誌組指定一個日誌成員.為了防止日誌成員損壞而導致日誌組無法使用,oracle建議每個日誌組至少包含兩個以上的日誌成員.如果日誌組只有一個日誌成員,並且該日誌出現損壞,那麼當後臺程式LGWR切換到該日誌組時,oracle會停止工作,並對該資料庫執行步完全恢復.

下面以為DEMO資料庫的每個日誌組增加一個日誌成員為例,說明增加日誌成員的方法.

ALTER DATABASE ADD LOGFILE MEMBER

‘D:demoredo1b.log’ to GROUP 1,

‘D:demoredo2b.log’ to GROUP 2,

‘D:demoredo3b.log’ to GROUP 3,

‘D:demoredo4b.log’ to GROUP 4;

日誌組的成員個數不能超過永久引數MAXLOGMEMBERS的設定.

刪除日誌成員

當日志成員出現損壞或者丟失時,後臺程式LGWR不能將事務變化寫入到該日誌成員中.

透過檢視後臺程式LGWR跟蹤檔案(位置:引數BACKGROUND_DUMP_DEST,

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245221/,如需轉載,請註明出處,否則將追究法律責任。

相關文章