oracle 10g滚动升级到11g

1、准备工作

搭建物理standby

转换为逻辑standby

 2、在备库上安装oracle11g软件,升级standby

参考oracle10g升级到oracle11g

 这里比上文多出现了一个警告

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切换为备库

参考oracle 10g dataguard 测试

 注意:升级后备库需要开始应用日志

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不能解决,还可以临时重新切换回来,看来是不靠谱了。待解决中。。。。。



原文地址:https://www.cnblogs.com/huanhuanang/p/5310512.html