Oracle 11g RAC集群升级至19c 集群(ADG物理主备+autoupgrade方式)

📅 2026/7/23 21:56:34
Oracle 11g RAC集群升级至19c 集群(ADG物理主备+autoupgrade方式)
Oracle 11g RAC集群升级至19c 集群ADG物理主备autoupgrade方式本案例使用ADG主备autoupgrade方式完成11g rac集群升级19c 集群一、环境介绍关键项主库备库数据库架构两节点Rac集群架构两节点Rac集群架构IP地址192.168.11.40/41192.168.11.61/62数据文件目录DATA(ASM磁盘组)DATA(ASM磁盘组)控制文件目录DATA(ASM磁盘组)DATA(ASM磁盘组)日志文件目录DATA(ASM磁盘组)DATA(ASM磁盘组)归档文件目录ARCH(ASM磁盘组)ARCH(ASM磁盘组)GI集群版本11.2.0.419.3.0.019c GI集群软件运行11g RAC集群数据库Oracle版本11.2.0.419.3.0.011.2.0.4(19c和11g软件版本都安装)OS版本Redhat 7.9 x64Redhat 7.9 x64主机名host40rac1/host41rac2host61rac1/host62rac2实例名orcl1/orcl2orcl1/orcl2Db_nameorclorclDb_unique_nameorclorcl_st特别注意1、备库两台主机安装19c GI 集群软件 2、备库两台主机安装19c RAC 仅安装数据库RAC软件11g RAC仅安装数据库RAC软件 3、备库提前创建DATA和ARCH两个磁盘组这两个磁盘组的compatible.asm和COMPATIBLE.RDBMS 必须指定为11.2.0.4必须11.2.0.2以上否则磁盘组创建报错一定要注意compatible不能创建为19 只有这样11g RAC集群软件才可以正确识别这个磁盘组读写才能完成后续11g rac主备搭建。 4、主库11g GI集群11.2.0.4 rac集群备库初始搭建为19c GI 11.2.0.4 rac集群这个很关键 5、备库11g rac搭建完毕后只需要启动其中一个节点案例中为节点1另外特别注意数据库的资源先不要注册至集群中等待升级19c后完成再去将资源注册至集群19c Gi不支持11g数据库资源 6、主备正常搭建完毕后正式升级时直接failover方式将备库切换为主库然后在备库上完成11g rac---19c rac的升级这种升级方式优点 1无需升级GI集群组件19c数据库软件也已经提前安装完毕只需升级数据库DB即可速度较快 2异机升级方式源主库集群无需任何操作升级过程有任何异常回退只需重新启动源主库集群二、主备搭建19C RAC集群安装参考文章《Oracle 19C RAC集群安装_linux7》主备搭建参考文章《Oracle 11g DataGuard主备架构搭建集群对集群》特别注意1、11g 集群图形界面安装时如果图形界面无法启动可能是 JDK 版本过高导致尝试将 JDK 版本降至 1.7 或 1.6或者静默安装方式 ./runInstaller 如果安装界面无法启动或报错可能是 JDK 版本过高导致尝试将 JDK 版本降至 1.7 或 1.6或者静默安装方式 2、备库建立静态注册监听文件注意此时监听是运行在19c GI集群下 配置方法如下 su - grid cd $ORACLE_HOME/network/admin cat listener.ora EOF SID_LIST_LISTENER (SID_LIST (SID_DESC (GLOBAL_DBNAME orcl) (ORACLE_HOME /u01/app/oracle/product/11.2/db_1) (SID_NAME orcl1) ) ) EOF 注意ORACLE_HOME /u01/app/oracle/product/11.2/db_1这个地方要写11g rac的ORACLE_HOME目录 3、备库搭建过程中报ORA-17628: Oracle error 19505 returned by remote Oracle server错误处理 备库11g alert日志中报错 ORA-15025: could not open disk /dev/asm-diskg ORA-27041: unable to open file Linux-x86_64 Error: 13: Permission denied Additional information: 9 Tue Jul 14 09:12:51 2026 SUCCESS: diskgroup DATA was dismounted ERROR: diskgroup DATA was not mounted Errors in file /u01/app/oracle/diag/rdbms/orcl_st/orcl1/trace/orcl1_ora_114169.trc: ORA-19505: failed to identify file DATA/orcl/control01.ctl ORA-17502: ksfdcre:3 Failed to create file DATA/orcl/control01.ctl ORA-15001: diskgroup DATA does not exist or is not mounted ORA-15040: diskgroup is incomplete ORA-15040: diskgroup is incomplete ORA-15040: diskgroup is incomplete ORA-15040: diskgroup is incomplete 解决方法 1安装完检查$ORACLE_HOME/bin/oracle的权限不然可能导致adg同步报对磁盘组没有权限。修改方法(两节点执行) su - oracle source ~/.bash_profile_11g ll -l $ORACLE_HOME/bin/oracle cd $ORACLE_HOME/bin chown oracle:asmadmin oracle chmod 6751 oracle chmod us oracle chmod gs oracle 2提前在ASM DATA磁盘组中创建好目录 su - grid asmcmd mkdir data/orcl 3将asmadmin组加入oracle用户 usermod -a -G asmadmin oracle 4、提前创建11g和19c数据库的profile文件如下(两节点执行) 111g profile文件创建 su - oracle vi /home/oracle/bash_profile_11g # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH$PATH:$HOME/.local/bin:$HOME/bin TMP/tmp; export TMP TMPDIR$TMP; export TMPDIR ORACLE_BASE/u01/app/oracle; export ORACLE_BASE ORACLE_HOME$ORACLE_BASE/product/11.2/db_1; export ORACLE_HOME ORACLE_SIDorcl1; export ORACLE_SID ###注意节点修改为ORACLE_SIDorcl2 ORACLE_TERMxterm; export ORACLE_TERM PATH/usr/sbin:$PATH; export PATH PATH$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/home/oracle/sh:/home/oracle/dh/scripts:$PATH; export PATH LD_LIBRARY_PATH$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH CLASSPATH$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH export EDITORvim stty erase ^H alias gobasecd $ORACLE_BASE alias gohomecd $ORACLE_HOME 219c profile文件创建 su - oracle vi /home/oracle/bash_profile_19c # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH$PATH:$HOME/.local/bin:$HOME/bin export PATH TMP/tmp; export TMP TMPDIR$TMP; export TMPDIR ORACLE_BASE/u01/app/oracle; export ORACLE_BASE ORACLE_HOME$ORACLE_BASE/product/19c/db_1; export ORACLE_HOME GRID_HOME/u01/app/19c/grid; export GRID_HOME ORACLE_SIDorcl1; export ORACLE_SID ###注意节点修改为ORACLE_SIDorcl2 export NLS_DATE_FORMATYYYY:MM:DDHH24:MI:SS export ORACLE_TERMxterm export PATH$ORACLE_HOME/bin:/usr/sbin:$ORACLE_HOME/OPatch:$PATH export LD_LIBRARY_PATH$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:$ORACLE_HOME/network/lib:/lib:/usr/lib export CLASSPATH$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib export EDITORvim export LANGen_US.UTF-8 export NLS_LANGAMERICAN_AMERICA.ZHS16GBK stty erase ^H set -o vi umask 022 alias gobasecd $ORACLE_BASE alias gohomecd $ORACLE_HOME alias gocrscd $GRID_HOME 备注 如果使用11g时环境变量生效方式 source /home/oracle/.bash_profile_11g 如果使用19c时环境变量生效方式 source /home/oracle/.bash_profile_19c三、升级前备库切换正式升级时直接failover方式将备库切换为主库方法如下1、停止主库启动至mount状态下刷新所有redo日志至备库 su - oracle srvctl stop database -d orcl -o immediate 集群的正常启停参考文章《Oracle RAC集群环境下正常启停数据库》 srvctl start instance -d orcl -i orcl1 -o mount; sqlplus /as sysdba ALTER SYSTEM FLUSH REDO TO orcl_st; 2、备库执行fail over切换主库转变为主库 sqlplus /as sysdba #取消日志应用同步 alter database recover managed standby database cancel; #执行failover切换 alter database recover managed standby database finish [force]; alter database commit to switchover to primary with session shutdown; alter database open; 检查 select inst_id,open_mode,database_role,protection_level,protection_mode,switchover_status,force_logging from gv$database; INST_ID OPEN_MODE DATABASE_ROLE PROTECTION_LEVEL PROTECTION_MODE SWITCHOVER_STATUS FOR ---------- ---------- ---------------- -------------------- -------------------- -------------------- --- 1 READ WRITE PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE FAILED DESTINATION YES四、正式升级至19C RAC集群(备库)详细步骤请参考文件《Oracle 11g单库升级至19c单库autoupgrade方式》下面记录几个需要特别注意的升级步骤1、设置11g和19c数据库软件的环境变量用于后续升级工作 su - oracle export ORACLE_HOME_11G/u01/app/oracle/product/11.2/db_1 export ORACLE_HOME_19C/u01/app/oracle/product/19c/db_1 2、将源主库RAC的tnsnames.ora、密码文件复制到19c rac目录 1)节点一 scp oracle192.168.11.40:/u01/app/oracle/product/11.2/db_1/network/admin/tnsnames.ora $ORACLE_HOME_19C/network/admin/ scp oracle192.168.11.40:/u01/app/oracle/product/11.2/db_1/dbs/orapworcl1 $ORACLE_HOME_19C/dbs/ 1)节点二 scp oracle192.168.11.41:/u01/app/oracle/product/11.2/db_1/network/admin/tnsnames.ora $ORACLE_HOME_19C/network/admin/ scp oracle192.168.11.41:/u01/app/oracle/product/11.2/db_1/dbs/orapworcl2 $ORACLE_HOME_19C/dbs/ 3、配置jdk变量 su - oracle export PATH$PATH:/u01/app/oracle/product/19c/db_1/jdk/bin java -version 4、创建autoupgrade的配置文件 cd /u01/soft java -jar /u01/soft/autoupgrade.jar -version java -jar /u01/soft/autoupgrade.jar -create_sample_file config cp /u01/soft/sample_config.cfg /u01/soft/sample_config.cfg.bak cat /u01/soft/sample_config.cfg EOF #全局日志路径 global.autoupg_log_dir/tmp/autoupgrade_log #日志目录 upg1.log_dir/tmp/autoupgrade_log/orcl #升级完成之后收集数据字典统计信息 global.dictionary_stats_afteryes #升级之前收集数据字典统计信息 global.dictionary_stats_beforeyes #升级之前收集固定表统计信息 global.fixed_stats_beforeyes #创建闪回点 global.restorationno ##不生成回复点GRP需要设置闪回默认是yes #升级完成之后不删除闪回点人工确认 global.drop_grp_after_upgradeno #升级数据库的数据库名 upg1.dbnameorcl #升级的开始时间 upg1.start_timeNOW #源端DB ORACLE_HOME upg1.source_home/u01/app/oracle/product/11.2/db_1 #源端DB ORACLE_HOME upg1.target_home/u01/app/oracle/product/19c/db_1 #升级数据库的ORACLE_SID这里需要注意 upg1.sidorcl1 #升级之后执行对象编译 dbold.run_utlrpyes #升级之后升级时区 dbold.timezone_upgyes #升级的目标版本19c upg1.target_version19 EOF 5、analyze运行升级前的检查脚本 java -jar /u01/soft/autoupgrade.jar -config /u01/soft/sample_config.cfg -mode analyze #这里要注意根据运行的结果日志查看哪些可以自动修复哪些项不能自动需要手工处理 6、Fixups模式运行升级前修复脚本 java -jar /u01/soft/autoupgrade.jar -config /u01/soft/sample_config.cfg -mode fixups 7、执行升级 java -jar /u01/soft/autoupgrade.jar -config /u01/soft/sample_config.cfg -mode deploy 备注cluster_databasefalse升级过程中需要设置为false升级完毕后自动调整为true这个步骤autoupgrade会自动完成 收尾工作 1 ##将19c的环境变量设置为默认的 mv /home/oracle/.bash_profile_19c /home/oracle/.bash_profile ##移除11g的HOME目录 mv /u01/app/oracle/product/11.2/db_1 /u01/app/oracle/product/11.2/db_1_bak2 source /home/oracle/.bash_profile env|grep ORACLE 2检查cluster_database参数 理论上升级完毕后会自动设置为true如果没有直接修改initorc1.ora中的参数将cluster_databasetrue设置 3配置spfile文件 #将spfile文件创建并保存至ASM磁盘组 create spfileDATA/orcl/spfileorcl.ora from pfile/u01/app/oracle/product/19c/db_1/initorcl1.ora; #将19c rac 1、2节点的pfile文件配置为指向ASM磁盘组中的spfile文件如下 #1节点执行 cat $ORACLE_HOME/dbs/initorcl1.ora EOF spfileDATA/orcl/spfileorcl.ora EOF #2节点执行 cat $ORACLE_HOME/dbs/initorcl2.ora EOF spfileDATA/orcl/spfileorcl.ora EOF 4修改/etc/oratab cat /etc/oratab EOF orcl:/u01/app/oracle/product/19c/db_1:N 5调整sqlnet.ora2节点都执行 cat $ORACLE_HOME/network/admin/sqlnet.ora EOF SQLNET.ALLOWED_LOGON_VERSION_CLIENT8 SQLNET.ALLOWED_LOGON_VERSION_SERVER8 EOF 6注册数据库资源至19c GI集群中 su - oracle #使用19c的环境变量 srvctl add database -d orcl_st -o /u01/app/oracle/product/19c/db_1 -p DATA/orcl/spfileorcl.ora srvctl add instance -d orcl_st -i orcl1 -n host61rac1 srvctl add instance -d orcl_st -i orcl2 -n host62rac2 srvctl start database -d orcl_st srvctl stop database -d orcl_st 注意这里需要使用db_unique_name的名称如果不想使用orcl_st需要在参数文件中提前将这一行直接去掉或者明确指定db_unique_nameorcl这样 备注 如果11g备库搭建后有将数据库注册至GI那么需要删除掉 su - oracle #使用11g的环境变量 source /home/oacle/.bash_profile_11g srvctl remove database -d orcl 7修改COMPATIBLE参数 ALTER SYSTEM SET COMPATIBLE19.0.0 sid* SCOPESPFILE; 8将ASM磁盘组COMPATIBLE参数调整为19c ##修改兼容性 su - grid sqlplus / as sysasm select name,compatibility,database_compatibility from v$asm_diskgroup; alter diskgroup DATA set attribute compatible.asm19.0.0.0.0; alter diskgroup DATA set attribute compatible.rdbms19.0.0.0.0; 9可选19c可以将密码文件注册和保存至ASM磁盘组中方法如下 su - oracle ##拷贝密码文件 cp /u01/app/oracle/product/19/db_1/dbs/orapworcl1 /u01/app/oracle/product/19/db_1/dbs/orapworcl su - grid 创建asm文件夹 asmcmd mkdir DATA/orcl/password --拷贝密码文件 asmcmd pwcopy --dbuniquename orcl_st /u01/app/oracle/product/19/db_1/dbs/orapworcl DATA/orcl/password su - oracle srvctl modify database -d orcl_st -pwfile DATA/orcl/PASSWORD/orapworcl srvctl config database -db orcl_st