1. 程式人生 > >Oracle日誌詳解

Oracle日誌詳解

一、Oracle日誌分類

分三大類: Alert log files--警報日誌,Trace files--跟蹤日誌(使用者和程序), redo log 重做日誌(記錄資料庫的更改)。

本文主要關注Oracle的重做日誌。
重做日誌分為線上重做日誌和歸檔重做日誌。
  online Redo log files--線上重做日誌,又稱聯機重做日誌,指Oracle以SQL指令碼的形式實時記錄資料庫的資料更新,換句話說,實時儲存已執行的SQL指令碼到線上日誌檔案中(按特定的格式)。
  Archive Redo log files--歸檔重做日誌,簡稱歸檔日誌,指當條件滿足時,Oracle將線上重做日誌以檔案形式儲存到硬碟(持久化)。

  重做日誌的簡單原理:在資料更新操作commit前,將更改的SQL指令碼寫入重做日誌。主要用於資料庫的增量備份和增量恢復。  

  重做日誌直接對應於硬碟的重做日誌檔案(有線上和歸檔二種),重做日誌檔案以組(Group)的形式組織,一個重做日誌組包含一個或者多個日誌檔案。


二、關於線上重做日誌(online redo log)

線上重做日誌的原理:
    
     對於線上重做日誌,Oracle 11g預設對於每個資料庫例項,建立3個線上日誌組,每組一個日誌檔案,檔名稱為REDO01.LOG,REDO02.LOG和REDO03.LOG。(使用者可以通過檢視操作新增/修改/刪除日誌組和日誌檔案來自定義線上重做日誌)
     每組內的日誌檔案的內容完全相同,且儲存在不同的位置,用於磁碟日誌映象,以做多次備份提高安全性。預設情況這3組通常只有一組處於活動狀態,不斷地同步寫入已操作的指令碼,當日志文件寫滿時(達到指定的空間配額),如果當前資料庫處於歸檔模式,則將線上日誌歸檔到硬碟,成為歸檔日誌;若當前資料庫處於非歸檔模式,則不進行歸檔操作,而當前線上日誌的內容會被下一次重新寫入覆蓋而無法儲存。因此,通常資料庫在執行時,是處於歸檔模式下的,以儲存資料更新的日誌。
    當前歸檔日誌組寫滿後,Oracle會切換到下一日誌組,繼續寫入,就這樣迴圈切換;當處於歸檔模式下,切換至原已寫滿的日誌組,若該日誌組歸檔完畢則覆蓋寫入,若沒有則只能使用日誌緩衝區,等待歸檔完畢之後才能覆蓋寫入。當然,處於非歸檔模式下是直接覆蓋寫入的。(關於資料庫歸檔模式的設定,我會在另外的博文中講到)。

    Oracle提供了2個檢視用於維護線上重做日誌:V$LOG 和  V$LOGFILE,我們可以通過這兩個檢視檢視和修改線上日誌。    

關於V$LOG檢視的詳細屬性欄位可Oracle 11g的官方文件:http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2029.htm
關於V$LOGFILE檢視的詳細屬性欄位可Oracle 11g的官方文件:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2031.htm

官方文件還是最給力的呀,不要忽視!!
        
通過v$logfile檢視查詢線上日誌檔案資訊:  
SQL> SELECT * FROM v$logfile ORDER BY group#;   

GROUP#   TATUS  TYPE     MEMBER                              IS_RECOVERY_DEST_FILE

1               ONLINE    E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG     NO
2               ONLINE    E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG     NO
3               ONLINE    E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG     NO


通過v$log檢視查詢線上日誌的總體資訊:
SQL> SELECT * FROM v$log;

GROUP#    THREAD#     SEQUENCE#    BYTES   MEMBERS     ARCHIVED  STATUS    FIRST_CHANGE#   FIRST_TIME               

1     1   49    52428800      1    NO    CURRENT    1466615     07-1月 -11
2     1   47    52428800      1    YES   INACTIVE   1434125     06-1月 -11
3     1   48    52428800      1    YES   INACTIVE   1460403     07-1月 -11

當然,還可以通過ALTER DATABASE ADD 、delete等命令增加/修改/刪除線上日誌或日誌組,具體操作可檢視http://blog.csdn.net/robinson_0612/archive/2010/07/20/5749556.aspx


三、關於歸檔重做日誌(Archive redo log)

    其實,所謂的歸檔,就是指將線上日誌進行歸檔、持久化到成固定的檔案到硬碟,便於以後的恢復和查詢。
    當然,前提條件是資料庫要處於歸檔模式。
    
Oracle 11g 預設是為歸檔日誌設定2個歸檔位置,這2個歸檔位置的的歸檔日誌的內容完全一致,但檔名不同。