1. 程式人生 > >Oracle聯機重做日誌檔案

Oracle聯機重做日誌檔案

一、Oracle中的幾類日誌檔案

Redo log files —->聯機重做日誌
Archive log files —->歸檔日誌
Alert log files —->告警日誌
Trace files —->跟蹤日誌
User_dump_dest —->使用者跟蹤日誌
Backupground_dump_dest —->程序跟蹤日誌

二、聯機重做日誌的規劃管理
1.聯機重做日誌
記錄了資料的所有變化(DML,DDL或管理員對資料所做的結構性更改等)
提供了恢復機制(對以外刪除宕機利用日誌檔案實現資料恢復)
可以被分組管理

2.聯機重做日誌組
由一個或多個相同的聯機日誌檔案組成一個聯機重做日誌組
至少兩個日誌組,每組至少一個成員
由LGWR後臺程序同時將日誌內容寫入到一個組的所有成員
PS:LGWR的觸發條件
在事務提交的時候
Redo Log Buffer 三分之一滿
Redo Log Buffer 多於1M的變化記錄

3.聯機重做日誌成員
重做日誌組內的每一個聯機日誌檔案稱為一個成員
一個組內的每一個成員具有相同的日誌序列號(log sequence number),且成員的大小相同
每次日誌切換時,Oracle伺服器分配一個新的LSN號給即將寫入日誌的日誌檔案組
LSN號用於唯一區分每一個聯機日誌組和歸檔日誌
處於歸檔模式的聯機日誌,LSN號在歸檔時也被寫入到歸檔日誌之中

4.日誌檔案的工作方式
日誌檔案採用按順序迴圈寫的方式
當一組聯機日誌組寫滿,LGWR則將日誌寫入到下一組,當最後一組寫滿則從第一組開始寫入
寫入下一組的過程稱為日誌切換
切換時發生檢查點過程

5.聯機日誌檔案的規劃
分散放開,多路複用
日誌所在的磁碟應當具有較高的I/O
一般日誌組大小應滿足自動切換間隔至少15-20分鐘左右業務需求
建議使用rdo結尾的日誌檔名,避免誤刪日誌檔案。如redo01.rdo,redo02.rdo

6.日誌切換和檢查點切換
ALTER SYSTEM SWITCH LOGFILE

7.新增日誌檔案組

    ALTER DATABASE ADD LOGFILE [GROUP n]
        ('$ORACLE_BASE/oradata/orcl/redo01.rdo',
         '$ORACLE_BASE/oradata/orcl/redo02.rdo')
        SIZE nM;

8.新增日誌成員

    ALTER DATABASE ADD LOGFILE MEMBER
    '$ORACLE_BASE/oradata/orcl/redo01.rdo' TO GROUP 1,
    '$ORACLE_BASE/oradata/orcl/redo02.rdo' TO GROUP 2;

9.刪除日誌成員
不能刪除組內的唯一一個成員
不能刪除處於active 和current 狀態組內的成員
刪除處於active 和current 狀態組內的成員,應使用日誌切換使其處於INACTIVE狀態後再刪除
對於組內如果一個成員為NULL 值,一個為INVALID,且組處入INACTIVE,僅能刪除INVALID狀態成員
刪除日誌成員,物理檔案並沒有真正刪除,需要手動刪除
刪除日誌檔案後,控制檔案被更新
對於處於歸檔模式下的資料庫,刪除成員時確保日誌已被歸檔,檢視v$log檢視獲得歸檔資訊

    ALTER DATABASE DROP LOGFILE MEMBER '$ORACLE_BASE/oradata/orcl/redo01.rdo'

11.日誌的重新命名

CURRENT狀態組內的成員不能被重新命名
建議該行為之前備份資料庫
重新命名或重定位之後建議立即備份控制檔案
重定位及重新命名的兩種方法
新增一個新成員到日誌組,然後刪除一箇舊的成員
使用ALTER DATABASE RENAME FILE 命令(不區分歸檔與非歸檔模式)
複製聯機日誌檔案到新路徑:

ho cp 'oldfile' 'newfile'

執行

ALTER DATABASE RENAME FILE 'oldfile' TO 'newfile'

對於處於CURRENT狀態的需要改名且不切換的情況下
辦法是切換到MOUNT狀態下再執行上述操作

12.清空日誌檔案組

    ALTER DATABASE CLEAR LOGIFLE GROUP n
    ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n

13.日誌的監視
檢視日誌檢視中的物理日誌檔案是否存在、位置、大小等

        SELECT 'ho cp '||member FROM v$logfile;

檢視日誌檔案所處的磁碟空間是否足夠

        SQL> ho df -h

檢視組內是否存在多個成員,如為單一成員應考慮增加日誌成員
日誌切換的間隔時間,應滿足15-20分鐘業務需求,如果切換間隔很短,應當增加日誌檔案的大小
增加方法:先刪除日誌組,再重建該組(對於current和active的需要切換再做處理)

檢視切換時間間隔

SELECT TO_CHAR(first_time,'yyyy-mm-dd hh24:mi:ss'),group# FROM v$log;

15.日誌的異常處理
不一致的情況(啟動時)

   ALTER DATABASE CLEAR LOGFILE GROUP n
   ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n

使用隱藏引數來解決(使用完記得刪除隱藏引數)
步驟:

        alter system set "_allow_resetlogs_corruption" = true scope = spfile;

        recover database using bakcup controlfile;

        alter database open resetlogs;

        shutdown immediate;

        startup mount;

        alter database open resetlogs;

        alter system reset "_allow_resetlogs_corruption" scope = spfile sid = '*'

三、與日誌有關的動態效能檢視

    V$LOG
    V$LOGFILE

V$LOG中STATUS的狀態值

        UNUSED: 從未對該聯機日誌寫入任何內容,一般為新增加聯機日誌檔案或是使用resetlog後的狀態
        CURRENT:當前重做日誌檔案,表示該重做日誌檔案為活動狀態,能夠被開啟和關閉
        ACTIVE:處於活動狀態,不屬於當前日誌,崩潰恢復需要該狀態,可用於塊恢復,可能歸檔,也可能未歸檔
        CLEARING:表示在執行alter database clear logfile命令後正將該日誌重建為一個空日誌,重建後狀態變為unused
        CLEARING_CURRENT:當前日誌處於關閉執行緒的清除狀態。如日誌某些故障或寫入新日誌標頭時發生I/O錯誤
        INACTIVE:例項恢復不在需要聯機重做檔案日誌組,可能歸檔也可能未歸檔

V$LOGFILE中STATUS的狀態值

        INVALID :表明該檔案不可訪問
        STALE :表明檔案內容不完全
        DELETED : 表明該檔案不再使用
        NULL :表明檔案正在使用

本人寫部落格主要為了對學習的知識點的鞏固,若文中有什麼不足的地方歡迎提出!