Redo Log之一:理解Oracle redo log

531968912發表於2015-12-16

1.      什麼是Redo log

Redo log包含所有的資料庫變化歷史,資料庫的所有操作變化,均按照寫入重做日誌緩衝區先於資料塊緩衝區、寫入重做日誌檔案先於寫入資料檔案;當發生提交動作時,將重做日誌緩衝區變化刷到重做日誌檔案。重做日誌檔案一般用於資料庫恢復(例項恢復和介質恢復)、Log Miner、Change Data Capture、流複製、GoldenGate複製等;Redo log檔案包含所有的DML變化(INSERT\UPDATE\DELETE\SELECT FOR UPDATE)、包含所有DDL語句造成的資料字典物件的更改及遞迴語句的更改,不包括DML語句。version 9i以上版本還會包括DDL語句;資料庫操作DML/DDL資料庫緩衝區與檔案的關係如下圖:


2.      Redo log寫入方式

Oracle重做日誌採用迴圈寫入的方式,每一個Oracle例項至少擁有2組中左日誌組,每組重做日誌組可以有一個或多個日誌成員;Oracle重做日誌一般由Oracle自動切換,重做日誌檔案在當LGWR程式停止寫入並開始寫入下一個日誌組時發生切換,或在使用者收到發出ALTER SYSTEM SWITCH LOGFILE時發生切換。

Oracle提供了清空重做日誌檔案功能,可以在資料庫正常執行過程中,當出現日誌檔案損壞而無法進行歸檔時,可以清空損壞的日誌檔案(ALTER DATABASE CLEAR LOGFILE GROUP N;),使得資料庫繼續執行而無需停止資料庫;如果損壞的日誌檔案仍未進行歸檔,可以使用UNARCHIVED關鍵字進行清理日誌(ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP N;)。世紀運維中,還可以在某個例項禁止某個執行緒,並刪除該例項的所有redo log。

SQL>ALTER DATABASE DISABLE THREAD '; 
SQL> ALTER DATABASE DROP LOGFILE GROUP 1; 
SQL> ALTER DATABASE DROP LOGFILE GROUP2;

 

3.      日誌組v$log和日誌成員v$logfile

1)    日誌組v$log

SQL> desc v$log

 Name              Null?    Type

 ------------------------   ------------  -----------------------

 GROUP#                     NUMBER

 THREAD#                   NUMBER

 SEQUENCE#                 NUMBER

 BYTES                      NUMBER

 BLOCKSIZE                  NUMBER

 MEMBERS                   NUMBER

 ARCHIVED                   VARCHAR2(3)

 STATUS                      VARCHAR2(16)

 FIRST_CHANGE#              NUMBER

 FIRST_TIME                   DATE

 NEXT_CHANGE#               NUMBER

 NEXT_TIME                    DATE

Group#redo log組編號,redo loggroup為單位,我們經常稱之為重做日誌組,一個例項裡至少要有兩個日誌組,每個組有一個或者多個成員;同一個group裡的成員的大小一致。

Thread#:在RAC環境裡才有意義,代表不同的例項的編號,RAC的每個例項有單獨redo log,該值與例項編號一致。

SEQUENCE#redo log序列號;我們都知道重做日誌是迴圈寫的,該值記錄每個例項日誌組的順序;該序號在歸檔日誌、RMAN備份和備份集等管理都是使用該值進行區分的。

BYTES:重做日誌的大小,該值記錄的是日誌組的大小,而日誌組可以有多個成員,可見同一個日誌組的日誌成員大小一致。

MEMBERS:日誌組包含的日誌成員個數,每個日誌組的成員個數可以是一個或多個。

ARCHIVED:是否已經已經歸檔成功,如果未開啟歸檔則該值為NO

STATUS:日誌組的當前狀態;Oracle日誌組有5種不同的狀態, CURRENT表示當前正在使用的日誌組;ACTIVE表示該日誌組仍是活躍的,對應的髒塊還沒有寫入到資料檔案上或者歸檔模式下未完成歸檔,即此時例項如果異常,會使用到該日誌組進行例項恢復;UNUSED表示還沒有使用的,一般只有新新增的未使用過的日誌組才會有這種狀態,建議新新增的日誌組時進行日誌切換,使得日誌組中沒有該狀態;INACTIVEACTIVE相對,也就是不包含髒資料。 CLEARING CLEARING_CURRENT這兩個狀態和clear logfile有關,CLEARING表示的是在執行了alter database clear logfile group N命令的日誌組狀態,所以這是一個執行過程中狀態,一旦命令執行結束,這個狀態也隨之執行結果而發生改變,如果是成功的話,狀態將變成UNUSED狀態,如果失敗或者是過程中中斷了使得clear不能完成,就會變更CLEARING_CURRENT,日誌切換異常或IO異常都會是狀態CLEARING_CURRENT

FIRST_CHANGE#:最小的SCN號,用於例項恢復。

FIRST_TIME:最小SCN號的時間。

NEXT_CHANGE#:下一個SCN號,用於例項恢復。

NEXT_TIME:下一個SCN號的時間。

2)    日誌成員v$logfile

SQL> desc v$logfile;

 Name                       Null?    Type

 ----------------------------------------- -------- ----------------------------

 GROUP#                          NUMBER

 STATUS                          VARCHAR2(7)

 TYPE                            VARCHAR2(7)

 MEMBER                         VARCHAR2(513)

 IS_RECOVERY_DEST_FILE           VARCHAR2(3)

GROUP#:與前面v$logGROUP#相同;

STATUSINVALID代表檔案不可訪問;STALE表示檔案不完全,比如新增日誌成員等操作正在執行;DELETED表示該檔案已經不再使用;null表示檔案正在正常使用。

 

4.      檢查點與日誌切換

    重做日誌一般涉及到LGWRCKPTDBWRARCHn四個後臺程式;LGWR後臺程式是將log buffer中的資料寫到日誌檔案的程式,是oracle相當重要的一個後臺程式,LGWR程式觸發的條件為以下4種情況之一:

a、    每3秒鐘;也就是該程式最多休眠3秒鐘,休眠時觸發rdbms ipc message事件; LGWRbuffer中的資料寫到日誌檔案時,觸發log file parallel write事件;

b、    在事務提交時(COMMIT),此時會觸發LGWR程式寫完後才返回提交成功,在等待LGWR程式寫的過程中將觸發log file sync事件;

c、    DBWn程式寫入資料檔案之前;

d、    Redo log Buffer三分之一滿時,這個數字是有一個隱含引數_log_io_size控制,該值的預設值是log buffer大小的1/3;該值的最大值為3MB,所以Redo log buffer多於1MB的變化記錄時也會觸發LGWR程式寫;

CKPT後臺程式是檢查點程式,以下幾種情況會觸發CKPT程式進行檢查點操作:

1)、例項關閉時;

2)、備份命令執行時;

3)、手動執行CheckPoint操作時;

4)、達到log_checkpoint_timoutlog_checkpoint_internalfatstart_mttr_target引數設定臨界值;

5)、資料檔案被online/offline時;

5.      Redo Log損壞常見解決辦法

a、非當前日誌且已歸檔,使用命令將損壞日誌清空:

SQL> alter database clear logfile group n;

b、非當前日誌當尚未歸檔,則需要用

SQL>alter database clear unarchived logfile group n;

c、如果是當前日誌損壞,一般不能clear,則可能意味著丟失資料,有備份,可以採用備份進行不完全恢復;如果沒有備份,只能通過將資料庫啟動到mount狀態將損壞的日誌檔案刪除。

Created by Tony.Tang[TangYun]2015.02

--------------End-----------------------


 

 

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

相關文章