1、准备工作
搭建物理standby
转换为逻辑standby
2、在备库上安装oracle11g软件,升级standby
这里比上文多出现了一个警告
WARNING: --> Sync standby database prior to upgrade.
由于standby是备份恢复出来的,需要/etc/oratab增加(否则升级时找不到要升级的数据库):
std:/usr/oracle/product/10.2.0:N
升级完之后,开始sql apply,一定要确定日志同步没问题,再开始下一步操作。
备份参数文件:
create pfile from spfile;
3、切换standby,11.2.0.4切换为主库,10.2.0.4切换为备库
注意:升级后备库需要开始应用日志
SQL> alter database start logical standby apply; Database altered.
然后再开始切换
问题:
1、准备切换报错
SQL> alter database prepare to switchover to primary; alter database prepare to switchover to primary * ERROR at line 1: ORA-00258: NOARCHIVELOG 模式下的手动归档必须标识日志
搭建oracle11g时未进行归档,修改归档模式
2、修改归档模式
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount; ORA-00119: invalid specification for system parameter LOCAL_LISTENER ORA-00132: syntax error or unresolved network name 'LISTENER_STD'
监听的参数不对。。。。。
修改参数文件设置静态监听,启动又报错
SQL> startup ORACLE instance started. Total System Global Area 626327552 bytes Fixed Size 2255832 bytes Variable Size 230687784 bytes Database Buffers 390070272 bytes Redo Buffers 3313664 bytes ORA-00205 控制文件不对
查看参数文件,发现控制文件目录还是原来的10gstandby的控制文件目录,修改目录启动没问题了。不过11g的参数和10g的参数有所改动,纠结要不要重新开始呢,到这才发现参数文件备份也很重要啊,否则这都得手工去改,先改改试试,看能对不。
改完之后启动正常,日志应用也没问题。
3、standbyredo日志文件需要重建么,之前建的有,升级之后消失了
重新创建3个standby redo文件
SQL> alter database add standby logfile group 4 '/u01/oracle/oradata/STD//standbyredo4.log' size 50m; SQL> alter database add standby logfile group 5 '/u01/oracle/oradata/STD//standbyredo5.log' size 50m; SQL> alter database add standby logfile group 6 '/u01/oracle/oradata/STD//standbyredo6.log' size 50m;
4、归档路径状态error
由于升级之后没有创建tnsname.ora,从原来的10g中copy一份,依然报错
SQL> select DEST_NAME,status,error from v$archive_dest; DEST_NAME STATUS ERROR -------------------- -------------------- -------------------- LOG_ARCHIVE_DEST_1 VALID LOG_ARCHIVE_DEST_2 ERROR ORA-12154: TNS: 无法解析指定的连接标 识符
重启数据库试试,是不是数据库启动之后,修改tnsname.ora,归档路径并不认识?
重启后正常。
5、切换成功了
目前是主库是11g,备库是10g
实际上可以直接failover,因为还得重新搭建物理standby。
先逻辑standby跑一段时间看看。
日志传输没有问题,但是应用有问题:
Errors in file /usr/oracle/admin/test/bdump/test_p001_6635.trc: ORA-00604: error occurred at recursive SQL level 1 ORA-00904: "HASHCODE": invalid identifier LOGSTDBY status: ORA-00904: "HASHCODE": invalid identifier Tue Mar 29 11:21:47 2016 <krvrd.c:krvrdfdm>: Dict mine error exit. Log stream scan failed. flags 80, last_slave_error 904 LOGSTDBY status: ORA-01333: failed to establish Logminer Dictionary ORA-01304: subordinate process error. Check alert and trace logs ORA-00904: : invalid identifier
trc文件内容:
Instance name: test Redo thread mounted by this instance: 1 Oracle process number: 24 Unix process pid: 6635, image: oracle@oracle81 (P001) *** SERVICE NAME:(SYS$BACKGROUND) 2016-03-29 11:21:46.591 *** SESSION ID:(143.1) 2016-03-29 11:21:46.591 ORA-00604: error occurred at recursive SQL level 1 ORA-00904: "HASHCODE": invalid identifier *** 2016-03-29 11:21:55.176 *** SERVICE NAME:(SYS$BACKGROUND) 2016-03-29 11:21:55.176 *** SESSION ID:(141.2) 2016-03-29 11:21:55.176 ORA-00604: error occurred at recursive SQL level 1 ORA-00904: "HASHCODE": invalid identifier
oracle11g传过来的日志,10g并不能应用,这是什么问题呢?
原想着,都能跑的话,如果11g有bug不能解决,还可以临时重新切换回来,看来是不靠谱了。待解决中。。。。。