模擬狀況:
環境中,SID 為 TestOne,有三個 ASM Diskgroup,分別名為 +SYS,+DATA 以及 +Archive。使用 DBCA 建立資料庫,設定檔案儲存位置於 +SYS 上。過程中,將 Enable Archive Log 打勾,然後設定參數。在 Archive Log Destination 的地方,預設值是 +SYS/{DB_UNIQUE_NAME}。此時修改預設值成為 +Archive/{DB_UNIQUE_NAME},然後繼續安裝動作。建立 DB 過程中,都不會有錯誤訊息。建立完畢後,重新啟動 DB,也不會有錯誤訊息。
但是第二天,卻發現 DB 崩潰,instance 無法重新啟動。觀察 alert log,會看到以下資訊:
ORACLE Instance TestOne - Archival Error
Wed Jul 2 13:26:07 2008
ORA-16038: log 3 sequence# 1 cannot be archived
ORA-00254: error in archive control string ''
ORA-00312: online log 3 thread 1: '+Archive/TestOne/redo03.log'
ORA-15173: entry 'TestOne' does not exist in directory '/'
原因:
向 Oracle 申請 Service Request,書信往來後,確認了這是一個 unpublished bug。
簡單來說,通常 archive log 的預設路徑,是存放資料的(以上例來說,就是 +SYS)的 diskgroup。由於所有檔案預設存放路徑都是 +DiskGroup/{DB_UNIQUE_NAME},因此該路徑會在其他程序中被建立,所以採取預設值的時候,archive log destination 不會被建立的問題並不會被發現。
可是當修改了路徑之後,這個 bug 就出現了。在上述的案例中,預設 archive log 是自動備份模式。因此到了備份時間一到,archive service 自動運行,卻發現預設的路徑不存在;上述例子就是 +Archive/{DB_UNIQUE_NAME};也就是說,+Archive 下面並沒有 TestOne 這個路徑存在,所以無法備份。所以 instance 就崩潰了。
解決方案:
Oracle 技術支援人員告知,這個 bug 在 11g 中已經被修正了。
至於 10g 目前並沒有任何 patch 來修正這個問題。因此如果使用 DBCA 建立資料庫的過程中,archive log destination 被修改為異於預設值的時候,請手動建立該目錄。
環境中,SID 為 TestOne,有三個 ASM Diskgroup,分別名為 +SYS,+DATA 以及 +Archive。使用 DBCA 建立資料庫,設定檔案儲存位置於 +SYS 上。過程中,將 Enable Archive Log 打勾,然後設定參數。在 Archive Log Destination 的地方,預設值是 +SYS/{DB_UNIQUE_NAME}。此時修改預設值成為 +Archive/{DB_UNIQUE_NAME},然後繼續安裝動作。建立 DB 過程中,都不會有錯誤訊息。建立完畢後,重新啟動 DB,也不會有錯誤訊息。
但是第二天,卻發現 DB 崩潰,instance 無法重新啟動。觀察 alert log,會看到以下資訊:
ORACLE Instance TestOne - Archival Error
Wed Jul 2 13:26:07 2008
ORA-16038: log 3 sequence# 1 cannot be archived
ORA-00254: error in archive control string ''
ORA-00312: online log 3 thread 1: '+Archive/TestOne/redo03.log'
ORA-15173: entry 'TestOne' does not exist in directory '/'
原因:
向 Oracle 申請 Service Request,書信往來後,確認了這是一個 unpublished bug。
簡單來說,通常 archive log 的預設路徑,是存放資料的(以上例來說,就是 +SYS)的 diskgroup。由於所有檔案預設存放路徑都是 +DiskGroup/{DB_UNIQUE_NAME},因此該路徑會在其他程序中被建立,所以採取預設值的時候,archive log destination 不會被建立的問題並不會被發現。
可是當修改了路徑之後,這個 bug 就出現了。在上述的案例中,預設 archive log 是自動備份模式。因此到了備份時間一到,archive service 自動運行,卻發現預設的路徑不存在;上述例子就是 +Archive/{DB_UNIQUE_NAME};也就是說,+Archive 下面並沒有 TestOne 這個路徑存在,所以無法備份。所以 instance 就崩潰了。
解決方案:
Oracle 技術支援人員告知,這個 bug 在 11g 中已經被修正了。
至於 10g 目前並沒有任何 patch 來修正這個問題。因此如果使用 DBCA 建立資料庫的過程中,archive log destination 被修改為異於預設值的時候,請手動建立該目錄。
- 執行 sqlplus /nolog
- 執行 CONNECT / AS SYSDBA;
- 執行 STARTUP MOUNT;
- 執行 ALTER DATABASE NOARCHIVELOG;
- 執行 ALTER DATABASE OPEN;
- 執行 ALTER DISKGROUP Archive ADD DIRECTORY '+Archive/TestOne';
- 執行 SHUTDOWN IMMEDIATE;
- 執行 EXIT
- 執行 sqlplus /nolog
- 執行 CONNECT / AS SYSDBA;
- 執行 STARTUP MOUNT;
- 執行 ALTER DATABASE ARCHIVELOG;
- 執行 ALTER DATABASE OPEN;
- 執行 EXIT
沒有留言:
張貼留言