【REDO】刪除聯機重做日誌檔案組的注意事項

secooler發表於2011-07-12
  關於聯機重做日誌檔案組的刪除需要注意以下幾點:
  ①日誌組為active和current狀態時不可以刪除
  ②日誌組在資料庫級別刪除後作業系統上的檔案不會被級鏈刪除
  ③
對於一個Oracle資料庫例項,至少要包含兩個聯機重做日誌組

1.日誌組為active和current狀態時不可以刪除
1)查詢當前系統中日誌組狀態
sys@ora10g> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 CURRENT
         2 INACTIVE
         3 INACTIVE

2)嘗試刪除狀態為“CURRENT”的聯機重做日誌組
這裡顯示為“CURRENT”狀態的日誌組為第一組。
sys@ora10g> alter database drop logfile group 1;
alter database drop logfile group 1
*
ERROR at line 1:
ORA-01623: log 1 is current log for instance ora10g (thread 1) - cannot drop
ORA-00312: online log 1 thread 1: '/oracle/ora10gR2/oradata/ora10g/redo01.log'

提示資訊描述得很清楚,由於要刪除的第一組日誌是ora10g例項的當前日誌組,不允許刪除。

2.日誌組在資料庫級別刪除後作業系統上的檔案不會被級鏈刪除
1)獲取日誌組成員資訊
sys@ora10g> col MEMBER for a50
sys@ora10g> select group#,member from v$logfile;

    GROUP# MEMBER
---------- --------------------------------------------------
         1 /oracle/ora10gR2/oradata/ora10g/redo01.log
         2 /oracle/ora10gR2/oradata/ora10g/redo02.log
         3 /oracle/ora10gR2/oradata/ora10g/redo03.log

2)刪除第三組日誌
sys@ora10g> alter database drop logfile group 3;

Database altered.

sys@ora10g> select group#,member from v$logfile;

    GROUP# MEMBER
---------- --------------------------------------------------
         1 /oracle/ora10gR2/oradata/ora10g/redo01.log
         2 /oracle/ora10gR2/oradata/ora10g/redo02.log

刪除成功。

3)確認作業系統檔案是否刪除
sys@ora10g> !ls -l /oracle/ora10gR2/oradata/ora10g/redo03.log
-rw-r----- 1 oracle oinstall 52429312 Jul 12 10:58 /oracle/ora10gR2/oradata/ora10g/redo03.log

可見,雖然在資料庫層面已經將日誌組刪除成功,但是在作業系統上依然殘留著對應的檔案。
也正因為這個原因,如果沒有對作業系統做相應清理,在此使用同樣的檔案建立日誌組時會報“ORA-27038”錯,提示檔案已經存在,如下所示。
sys@ora10g> alter database add logfile group 3 ('/oracle/ora10gR2/oradata/ora10g/redo03.log') size 50m;
alter database add logfile group 3 ('/oracle/ora10gR2/oradata/ora10g/redo03.log') size 50m
*
ERROR at line 1:
ORA-00301: error in adding log file '/oracle/ora10gR2/oradata/ora10g/redo03.log' - file cannot be created
ORA-27038: created file already exists
Additional information: 1

4)手工刪除作業系統上的殘留檔案
sys@ora10g> !rm -f /oracle/ora10gR2/oradata/ora10g/redo03.log

這樣,日誌檔案組刪除任務才算徹底完成。

3.對於一個Oracle資料庫例項,至少要包含兩個聯機重做日誌組
目的:進行切換,以便歸檔模式下進行歸檔。
1)確認當前系統日子組資訊
sys@ora10g> select group#,member from v$logfile;

    GROUP# MEMBER
---------- --------------------------------------------------
         1 /oracle/ora10gR2/oradata/ora10g/redo01.log
         2 /oracle/ora10gR2/oradata/ora10g/redo02.log

2)嘗試再刪除一組日誌
目前系統中僅剩兩組日誌組,此時我們嘗試再刪除一組日誌,看看結果如何。
sys@ora10g> alter database drop logfile group 2;
alter database drop logfile group 2
*
ERROR at line 1:
ORA-01567: dropping log 2 would leave less than 2 log files for instance ora10g (thread 1)
ORA-00312: online log 2 thread 1: '/oracle/ora10gR2/oradata/ora10g/redo02.log'

其中的“ORA-01567”錯誤提示內容已經清晰的說明了一切:dropping log 2 would leave less than 2 log files for instance ora10g (thread 1)

4.小結
  本文就聯機重做日誌檔案組刪除過程中需要注意的三個方面進行了測試,在日常維護過程中就此內容需要多加註意。
  建議根據具體的應用特點建立多個日誌組,並且保證每組日誌中包含多個日誌成員,防止因個別日誌檔案損壞導致系統故障。

Good luck.

secooler
11.07.12

-- The End --

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

相關文章