在做 oracle RAC 歸檔日誌配置時,出現了一個錯誤,開始看資料的時候,
注意到了 LOG_ARCHIVE_DEST_n 與 LOG_ARCHIVE_DEST 不能同時使用,
但在配置的時候並沒有往心裏去,一直都在想,出現問題再解決也不遲。
於是乎當由於同時配置了 LOG_ARCHIVE_DEST_1 與 LOG_ARCHIVE_DEST 或者 LOG_ARCHIVE_DUPLEX_DEST 後,
停止數據庫,執行 startup mount 時,出現如下錯誤
SQL> startup mount
ORA-16019: cannot use LOG_ARCHIVE_DEST_1 with LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST
數據庫啓動不了,參數也改不了,只能修改 pfile 了。
ORACLE RAC 環境下的 pfile 都是存在 ASM 磁盤組裏面,
1. 查看本地 spfile ,找到spfile 實際路徑
cd $ORACLE_HOME/dbs
less initracdb1.ora
內容如下SPFILE='+ORCLDATA/racdb/spfileracdb.ora'
可以發現,他是做了一個連接,連接指向 ASM 磁盤組的共享 spfile
2. 通過 spfile 創建 profile
如果直接使用 create pfile='/tmp/oracle/init.ora' fromspfile; 語句的話,我們會發現,導出的 init.ora 並不是完整的 spfile 。
因此我們需要指定 asm spfile 路徑
SQL> create pfile='/tmp/oracle/init.ora' from spfile=' +ORCLDATA/racdb/spfileracdb.ora';
3. 修改 profile 文件,去掉或註釋掉衝突項
vi /tmp/oracle/init.ora
這裏就是衝突的原因
去掉 *.log_archive_dest='/u01/app/archivelog'
4. asmcmd裏備份原來的spfile
使用 asmcmd 之前,grid 用戶需要添加如下環境變量
export ORACLE_SID=+ASM1
export ORACLE_HOME=/u01/app/11.2.0/grid
export PATH=$PATH:$ORACLE_HOME/bin
執行
su - grid
asmcmd
asmcmd下的文件操作命令與 linux 類似
ASMCMD> cd +ORCLDATA/racdb/
ASMCMD> cp spfileracdb.ora spfileracdb.ora.bak
ASMCMD> ls
備份完成
5. 根據 pfile 創建 spfile
SQL> create spfile='+ORCLDATA/racdb/spfileracdb.ora' from pfile='/tmp/oracle/init.ora';
6. 驗證 spfile 是否生效
ASMCMD> cp spfileracdb.ora /tmp/oracle/spfil.ora
vi /tmp/oracle/spfil.ora
我們發現衝突選項已經沒有了
7. 啓動數據庫
SQL> startup
數據庫成功啓動,問題解決