RMAN刪除歸檔日誌時將ASM上空目錄同時刪除
ASM上的bug還不少,在新建的RAC環境中碰到了這個bug。
在基於ASM的RAC環境中準備執行IMP匯入操作,在匯入操作執行之前,先對資料庫進行了備份,隨後備份了所有的歸檔日誌並執行了刪除操作。
然後執行匯入操作,但是很快發現匯入操作被HANG住了,檢查資料庫的會話發現,會話在等待歸檔的完成。而此時資料庫的當前例項的線上日誌已經寫滿,歸檔操作則一直沒有完成。
SQL> SELECT SID, EVENT, PROGRAM
2 FROM V$SESSION
3 WHERE SID = 162;
SID EVENT PROGRAM
---------- ---------------------------------------- ----------------------------------
162 log file switch (archiving needed) imp@ser1 (TNS V1-V3)
SQL> SELECT INSTANCE_NUMBER, INSTANCE_NAME, THREAD#
2 FROM V$INSTANCE;
INSTANCE_NUMBER INSTANCE_NAME THREAD#
--------------- ---------------- ----------
1 tradedb1 1
SQL> SELECT GROUP#, THREAD#, SEQUENCE#, ARCHIVED, STATUS
2 FROM V$LOG;
GROUP# THREAD# SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------------
1 1 34 NO INACTIVE
2 1 36 NO INACTIVE
3 1 35 NO INACTIVE
4 1 37 NO CURRENT
5 2 13 YES INACTIVE
6 2 14 YES INACTIVE
7 2 15 NO INACTIVE
8 2 16 NO CURRENT
已選擇8行。
手工執行歸檔則報錯:
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
ALTER SYSTEM ARCHIVE LOG CURRENT
*
第 1 行出現錯誤:
ORA-16014: 日誌 7 的序列號 15 未歸檔, 沒有可用的目的地
ORA-00312: 聯機日誌 7 執行緒 2: '+MEMBER/tradedb/tradedb_redo2_3_1_1g'
ORA-00312: 聯機日誌 7 執行緒 2: '+MEMBER/tradedb/tradedb_redo2_3_2_1g'
檢查alert檔案,同樣大量的歸檔錯誤資訊:
Thu Aug 20 11:34:38 2009
ARCH: Archival stopped, error occurred. Will continue retrying
Thu Aug 20 11:34:38 2009
ORACLE Instance tradedb1 - Archival Error
Thu Aug 20 11:34:38 2009
ORA-16038: log 4 sequence# 4 cannot be archived
ORA-00254: error in archive control string ''
ORA-00312: online log 4 thread 1: '+MEMBER/tradedb/tradedb_redo1_4_1_1g'
ORA-00312: online log 4 thread 1: '+MEMBER/tradedb/tradedb_redo1_4_2_1g'
ORA-15173: entry 'archivelog' does not exist in directory 'tradedb'
Thu Aug 20 11:34:38 2009
Errors in file /data/oracle/admin/tradedb/bdump/tradedb1_arc1_10016.trc:
ORA-16038: log 4 sequence# 4 cannot be archived
ORA-00254: error in archive control string ''
ORA-00312: online log 4 thread 1: '+MEMBER/tradedb/tradedb_redo1_4_1_1g'
ORA-00312: online log 4 thread 1: '+MEMBER/tradedb/tradedb_redo1_4_2_1g'
ORA-15173: entry 'archivelog' does not exist in directory 'tradedb'
問題顯然是由於ASM上的歸檔路徑archivelog不存在造成的。可是這個路徑早在資料庫建立的時候就手工建立了,而且以前歸檔並沒有出現同樣的問題。而最近只做過RMAN的備份操作,莫非是RMAN在刪除歸檔的時候將目錄同時刪除了。
透過asmcmd手工新增目錄後,透過RMAN執行BACKUP ARCHIVELOG ALL DELETE ALL INPUT的命令,檢查是否會刪除ASM上目錄。
首先在節點2上連線asmcmd命令:
bash-3.00$ export ORACLE_SID=+ASM2
bash-3.00$ asmcmd
ASMCMD> cd member
ASMCMD> cd tradedb
ASMCMD> ls
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
archivelog/
control01.ctl
control02.ctl
control03.ctl
spfiletradedb.ora
tradedb_gpo_1_4g
tradedb_ndmain_1_4g
tradedb_ndmain_2_4g
tradedb_ndmain_3_4g
tradedb_ndmain_4_4g
tradedb_ndmain_5_4g
tradedb_redo1_1_1_1g
tradedb_redo1_1_2_1g
tradedb_redo1_2_1_1g
tradedb_redo1_2_2_1g
tradedb_redo1_3_1_1g
tradedb_redo1_3_2_1g
tradedb_redo1_4_1_1g
tradedb_redo1_4_2_1g
tradedb_redo2_1_1_1g
tradedb_redo2_1_2_1g
tradedb_redo2_2_1_1g
tradedb_redo2_2_2_1g
tradedb_redo2_3_1_1g
tradedb_redo2_3_2_1g
tradedb_redo2_4_1_1g
tradedb_redo2_4_2_1g
tradedb_sysaux_1_1g
tradedb_sysaux_2_1g
tradedb_system_1_4g
tradedb_temp_1_4g
tradedb_temp_2_4g
tradedb_temp_3_4g
tradedb_temp_4_4g
tradedb_temp_5_4g
tradedb_undotbs1_1_4g
tradedb_undotbs1_2_4g
tradedb_undotbs1_3_4g
tradedb_undotbs1_4_4g
tradedb_undotbs1_5_4g
tradedb_undotbs2_1_4g
tradedb_undotbs2_2_4g
tradedb_undotbs2_3_4g
tradedb_undotbs2_4_4g
tradedb_undotbs2_5_4g
tradedb_users_1_200m
tradedb_zhejiang_10_4g
tradedb_zhejiang_11_4g
tradedb_zhejiang_12_4g
tradedb_zhejiang_13_4g
tradedb_zhejiang_14_4g
tradedb_zhejiang_15_4g
tradedb_zhejiang_16_4g
tradedb_zhejiang_17_4g
tradedb_zhejiang_18_4g
tradedb_zhejiang_19_4g
tradedb_zhejiang_1_4g
tradedb_zhejiang_20_4g
tradedb_zhejiang_2_4g
tradedb_zhejiang_3_4g
tradedb_zhejiang_4_4g
tradedb_zhejiang_5_4g
tradedb_zhejiang_6_4g
tradedb_zhejiang_7_4g
tradedb_zhejiang_8_4g
tradedb_zhejiang_9_4g
ASMCMD> cd archivelog
ASMCMD> ls
1_31_694968965.dbf
1_32_694968965.dbf
2009_08_25/
2009_08_27/
2_13_694968965.dbf
ASMCMD> cd ..
可以看到,現在archivelog目錄是存在的,下面用RMAN執行BACKUP ARCHIVELOG ALL DELETE ALL INPUT命令:
bash-3.00$ rman target /
恢復管理器: Release 10.2.0.3.0 - Production on 星期四 8月 27 23:40:34 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
連線到目標資料庫: TRADEDB (DBID=4181457554)
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data/backup/%U';
4> backup archivelog all delete all input;
5> }
使用目標資料庫控制檔案替代恢復目錄
分配的通道: c1
通道 c1: sid=320 例項=tradedb1 devtype=DISK
啟動 backup 於 27-8月 -09
當前日誌已存檔
通道 c1: 正在啟動存檔日誌備份集
通道 c1: 正在指定備份集中的存檔日誌
輸入存檔日誌執行緒 =1 序列 =31 記錄 ID=6046 時間戳=695832644
輸入存檔日誌執行緒 =1 序列 =32 記錄 ID=6047 時間戳=696017068
輸入存檔日誌執行緒 =1 序列 =33 記錄 ID=6050 時間戳=696037299
輸入存檔日誌執行緒 =2 序列 =13 記錄 ID=6048 時間戳=696017368
輸入存檔日誌執行緒 =2 序列 =14 記錄 ID=6049 時間戳=696037569
通道 c1: 正在啟動段 1 於 27-8月 -09
通道 c1: 已完成段 1 於 27-8月 -09
段控制程式碼=/data/backup/agknpbtr_1_1 標記=TAG20090827T234146 註釋=NONE
通道 c1: 備份集已完成, 經過時間:00:00:26
通道 c1: 正在刪除存檔日誌
存檔日誌檔名 =+MEMBER/tradedb/archivelog/1_31_694968965.dbf 記錄 ID=6046 時間戳 =695832644
存檔日誌檔名 =+MEMBER/tradedb/archivelog/1_32_694968965.dbf 記錄 ID=6047 時間戳 =696017068
存檔日誌檔名 =+MEMBER/tradedb/archivelog/1_33_694968965.dbf 記錄 ID=6050 時間戳 =696037299
存檔日誌檔名 =+MEMBER/tradedb/archivelog/2_13_694968965.dbf 記錄 ID=6048 時間戳 =696017368
存檔日誌檔名 =+MEMBER/tradedb/archivelog/2_14_694968965.dbf 記錄 ID=6049 時間戳 =696037569
完成 backup 於 27-8月 -09
釋放的通道: c1
現在回到節點2上的asmcmd命令,檢查archivelog目錄:
ASMCMD> ls
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
control01.ctl
control02.ctl
control03.ctl
spfiletradedb.ora
tradedb_gpo_1_4g
tradedb_ndmain_1_4g
tradedb_ndmain_2_4g
tradedb_ndmain_3_4g
tradedb_ndmain_4_4g
tradedb_ndmain_5_4g
tradedb_redo1_1_1_1g
tradedb_redo1_1_2_1g
tradedb_redo1_2_1_1g
tradedb_redo1_2_2_1g
tradedb_redo1_3_1_1g
tradedb_redo1_3_2_1g
tradedb_redo1_4_1_1g
tradedb_redo1_4_2_1g
tradedb_redo2_1_1_1g
tradedb_redo2_1_2_1g
tradedb_redo2_2_1_1g
tradedb_redo2_2_2_1g
tradedb_redo2_3_1_1g
tradedb_redo2_3_2_1g
tradedb_redo2_4_1_1g
tradedb_redo2_4_2_1g
tradedb_sysaux_1_1g
tradedb_sysaux_2_1g
tradedb_system_1_4g
tradedb_temp_1_4g
tradedb_temp_2_4g
tradedb_temp_3_4g
tradedb_temp_4_4g
tradedb_temp_5_4g
tradedb_undotbs1_1_4g
tradedb_undotbs1_2_4g
tradedb_undotbs1_3_4g
tradedb_undotbs1_4_4g
tradedb_undotbs1_5_4g
tradedb_undotbs2_1_4g
tradedb_undotbs2_2_4g
tradedb_undotbs2_3_4g
tradedb_undotbs2_4_4g
tradedb_undotbs2_5_4g
tradedb_users_1_200m
tradedb_zhejiang_10_4g
tradedb_zhejiang_11_4g
tradedb_zhejiang_12_4g
tradedb_zhejiang_13_4g
tradedb_zhejiang_14_4g
tradedb_zhejiang_15_4g
tradedb_zhejiang_16_4g
tradedb_zhejiang_17_4g
tradedb_zhejiang_18_4g
tradedb_zhejiang_19_4g
tradedb_zhejiang_1_4g
tradedb_zhejiang_20_4g
tradedb_zhejiang_2_4g
tradedb_zhejiang_3_4g
tradedb_zhejiang_4_4g
tradedb_zhejiang_5_4g
tradedb_zhejiang_6_4g
tradedb_zhejiang_7_4g
tradedb_zhejiang_8_4g
tradedb_zhejiang_9_4g
ASMCMD> ls archivelog
asmcmd: entry 'archivelog' does not exist in directory '+member/tradedb/'
顯然RMAN在刪除歸檔日誌的同時刪除空目錄。
查詢了metalink文件,發現果然是Oracle的bug,metalink文件Bug No. 4431215描述了這個問題。如果在ASM上建立的目錄名稱和SID字首相同,則這個目錄下的所有目錄一旦為空,就會被ASM例項自動刪除,不管這個目錄是ASM自動建立,還是使用者手工建立的。
解決這個問題的辦法倒是很多,比如將歸檔目錄設定到日誌檔案的目錄中,或者改變主目錄的名稱使其和ORACLE_SID有所區別。還有更簡單的辦法,在歸檔目錄下複製一個小檔案,使得歸檔被刪除後,歸檔目錄不為空,從而避免路徑被清除。
Oracle在10.2.0.4和11.1.0.6中fixed了這個bug。因此升級或打PATCH也是解決這個問題的一個方法。
比如在執行了下面的命令後,就可以確保archivelog目錄不被刪除了:
SQL> create pfile='/export/home/oracle/inittradedb1.ora' from spfile;
檔案已建立。
SQL> create spfile='+MEMBER/tradedb/archivelog/spfile.ora' from pfile='/export/home/oracle/inittradedb1.ora';
檔案已建立。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-613729/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- rman 刪除指定時間點的歸檔日誌
- 作用RMAN 刪除歸檔日誌
- rman刪除歸檔日誌命令集
- 【Oracle】 rman 刪除歸檔日誌的命令Oracle
- rman刪除指定時間的歸檔
- 用rman 正確地刪除歸檔日誌
- rman刪除舊的歸檔日誌問題
- oracle刪除歸檔日誌Oracle
- 歸檔日誌的刪除
- Oracle歸檔日誌刪除Oracle
- AIX定時刪除歸檔日誌時系統HANG住AI
- 刪除歸檔日誌檔案
- 11gR2 RMAN歸檔日誌刪除策略
- 在Oracle中,如何定時刪除歸檔日誌檔案?Oracle
- 刪除data guard歸檔日誌
- 手動刪除歸檔日誌
- RMAN delete archivelog命令刪除歸檔日誌及歸檔日誌拷貝deleteHive
- Rman Crosscheck刪除失效歸檔ROS
- oracle 刪除過期的歸檔日誌Oracle
- crontab不能自動刪除歸檔日誌
- oracle dataguard 自動刪除歸檔日誌Oracle
- 歸檔日誌刪除的五種方法
- 如何定期自動刪除歸檔日誌
- 【警鐘】謹慎刪除歸檔日誌
- 刪除歸檔,保留最近的5個歸檔日誌
- 配置rman來自動刪除應用過的歸檔日誌
- rman刪除指定節點指定sequence範圍的歸檔日誌
- oracle rman不能自動刪除歸檔日誌備份解決Oracle
- rman 刪除所有過期歸檔
- 當ORACLE歸檔日誌滿後如何正確刪除歸檔日誌Oracle
- 誤刪歸檔日誌除導致備份歸檔日誌失敗
- 使用RMAN安全刪除歸檔檔案
- 歸檔目錄滿或刪除,把歸檔日誌自動轉移到另一個目錄的設定方法
- 如何正確刪除ORACLE歸檔日誌檔案Oracle
- rac+dg環境刪除歸檔日誌
- RMAN刪除歸檔日誌出現RMAN-0813錯誤的處理
- 手工rm刪除歸檔日誌對備份歸檔日誌的影響
- Oralce資料庫關閉歸檔日誌並且刪除歸檔日誌資料庫