在做 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