【AI工程化生死线】:为什么83%的团队在第3周就放弃AI辅助开发?一线技术总监的6小时诊断清单
2026/7/23 23:16:45
本案例使用ADG主备+autoupgrade方式,完成11g rac集群升级19c 集群
| 关键项 | 主库 | 备库 |
|---|---|---|
| 数据库架构 | 两节点Rac集群架构 | 两节点Rac集群架构 |
| IP地址 | 192.168.11.40/41 | 192.168.11.61/62 |
| 数据文件目录 | +DATA(ASM磁盘组) | +DATA(ASM磁盘组) |
| 控制文件目录 | +DATA(ASM磁盘组) | +DATA(ASM磁盘组) |
| 日志文件目录 | +DATA(ASM磁盘组) | +DATA(ASM磁盘组) |
| 归档文件目录 | +ARCH(ASM磁盘组) | +ARCH(ASM磁盘组) |
| GI集群版本 | 11.2.0.4 | 19.3.0.0(19c GI集群软件,运行11g RAC集群数据库) |
| Oracle版本 | 11.2.0.4 | 19.3.0.0+11.2.0.4(19c和11g软件版本都安装) |
| OS版本 | Redhat 7.9 x64 | Redhat 7.9 x64 |
| 主机名 | host40rac1/host41rac2 | host61rac1/host62rac2 |
| 实例名 | orcl1/orcl2 | orcl1/orcl2 |
| Db_name | orcl | orcl |
| Db_unique_name | orcl | orcl_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 u+s oracle chmod g+s oracle 2)提前在ASM DATA磁盘组中,创建好目录 su - grid asmcmd mkdir +data/orcl 3)将asmadmin组加入oracle用户 usermod -a -G asmadmin oracle 4、提前创建11g和19c数据库的profile文件,如下(两节点执行) 1)11g 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_SID=orcl1; export ORACLE_SID ###注意节点修改为ORACLE_SID=orcl2 ORACLE_TERM=xterm; 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 EDITOR=vim stty erase ^H alias gobase='cd $ORACLE_BASE' alias gohome='cd $ORACLE_HOME' 2)19c 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_SID=orcl1; export ORACLE_SID ###注意节点修改为ORACLE_SID=orcl2 export NLS_DATE_FORMAT="YYYY:MM:DDHH24:MI:SS" export ORACLE_TERM=xterm 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 EDITOR=vim export LANG=en_US.UTF-8 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK stty erase ^H set -o vi umask 022 alias gobase='cd $ORACLE_BASE' alias gohome='cd $ORACLE_HOME' alias gocrs='cd $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详细步骤,请参考文件《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 oracle@192.168.11.40:/u01/app/oracle/product/11.2/db_1/network/admin/tnsnames.ora $ORACLE_HOME_19C/network/admin/ scp oracle@192.168.11.40:/u01/app/oracle/product/11.2/db_1/dbs/orapworcl1 $ORACLE_HOME_19C/dbs/ 1)节点二 scp oracle@192.168.11.41:/u01/app/oracle/product/11.2/db_1/network/admin/tnsnames.ora $ORACLE_HOME_19C/network/admin/ scp oracle@192.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_after=yes #升级之前收集数据字典统计信息 global.dictionary_stats_before=yes #升级之前收集固定表统计信息 global.fixed_stats_before=yes #创建闪回点 global.restoration=no ##不生成回复点GRP,需要设置闪回,默认是yes #升级完成之后不删除闪回点,人工确认 global.drop_grp_after_upgrade=no #升级数据库的数据库名 upg1.dbname=orcl #升级的开始时间 upg1.start_time=NOW #源端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.sid=orcl1 #升级之后执行对象编译 dbold.run_utlrp=yes #升级之后,升级时区 dbold.timezone_upg=yes #升级的目标版本19c upg1.target_version=19 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_database=false升级过程中需要设置为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_database=true设置 3)配置spfile文件 #将spfile文件创建,并保存至ASM磁盘组 create spfile='+DATA/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 spfile='+DATA/orcl/spfileorcl.ora' EOF #2节点执行 cat >$ORACLE_HOME/dbs/initorcl2.ora <<EOF spfile='+DATA/orcl/spfileorcl.ora' EOF 4)修改/etc/oratab cat >/etc/oratab <<EOF orcl:/u01/app/oracle/product/19c/db_1:N 5)调整sqlnet.ora(2节点都执行) cat >>$ORACLE_HOME/network/admin/sqlnet.ora <<EOF SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8 SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 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_name='orcl'这样 备注: 如果11g备库搭建后,有将数据库注册至GI,那么需要删除掉! su - oracle #使用11g的环境变量 source /home/oacle/.bash_profile_11g srvctl remove database -d orcl 7)修改COMPATIBLE参数 ALTER SYSTEM SET COMPATIBLE="19.0.0" sid='*' SCOPE=SPFILE; 8)将ASM磁盘组COMPATIBLE参数调整为19c ##修改兼容性 su - grid sqlplus / as sysasm select name,compatibility,database_compatibility from v$asm_diskgroup; alter diskgroup DATA set attribute 'compatible.asm'='19.0.0.0.0'; alter diskgroup DATA set attribute 'compatible.rdbms'='19.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