一.前言:
本次升级为 Linux 异机同平台跨版本,由Oracle 11G 两节点RAC集群迁移并升级至Oracle 19C 两节点RAC集群。
二.系统环境:
源端操作系统:Red Hat Enterprise Linux Server release 6.10
源端数据库版本:Oracle 11.2.0.4 RAC
目标端操作系统:Red Hat Enterprise Linux Server release 7.9
目标断数据库版本: Oracle 19.16 RAC
三.迁移及升级的思路
1.在两台新服务器部署安装完成Oracle 19.3 GRID集群及Database软件并升级至19.16版本(根据补丁的稳定性选择补丁版本)
2.再新服务器上再安装部署 Oracle 11.2.0.4 database 软件。
3.11G database正好与原环境版本相同,在新环境配置ADG 将数据同步至新环境当中 (搭建DG建议通过rman 备份恢复进行配置)
4.正式切换步骤思路:
4.1 正式切换前,在确保数据同步一致性没问题后,源端主库关闭数据库及集群。
4.2 新环境的DG库 采用Fail over强制切换 (采用fail over强制切换的方式是为了确保后续万一数据库升级失败,主库可直接启用继续进行生产业务)。
4.3 新环境数据库强制OPEN后,做升级前的配置。
4.4 切换ORACLE_HOME的环境变量指向,通过19C的Oracle_home对数据库以startup upgrade模式启动。
4.5 执行升级数据字典的升级。
4.6 升级时区及编辑无效对象。
4.7 修改数据库参数并重启
4.8 重新注册实例到集群(升级完成)
四.实施过程
1. Oracle 19C GRid集群及database软件安装
过程略...........
2. Oracle 11G database软件安装
过程略...........
3. 配置ADG数据同步
环境变量截图:
配置DG,用Oracle 11.2.0.4的HOME去进行同步
过程略...........
4.正式切换升级步骤
4.1 检查数据同步状态。
- Primary:查询主库的最大日志
select max(sequence#) from v$archived_log;
select max(sequence#) from v$archived_log where applied='YES';
- standby:查询备库的最大日志
select max(sequence#) from v$archived_log;
select max(sequence#) from v$archived_log where applied='YES';
4.2 源端数据库停机
- 清理LOCAL=NO会话 加快shutdown速度
ps -ef|grep -v grep|grep LOCAL=NO|awk '{print $2}'|xargs kill -9
- 源端多切几次归档日志
alter system switch logfile;
- 两个节点同时关闭集群
crsctl stop has -f
4.3 备库切换
- 停止备库实时恢复
alter database recover managed standby database cancel;
- 强制应用备库的所有日志
alter database recover managed standby database finish force;
- 备库升级主库
alter database active physical standby database;
- 备库启动:
alter database open;
4.4 升级配置
4.4.1 先重新安装JAVAMV组件
- 卸载JAVAVM
startup mount
alter system set "_system_trig_enabled"=false scope=memory;
alter system enable restricted session;
alter database open;
@?/javavm/install/rmjvm.sql
- 安装JAVAVM
shutdown immediate
startup mount
alter system set "_system_trig_enabled"=false scope=memory;
alter database open;
@?/javavm/install/initjvm.sql
4.4.2 编辑无效对象及删除回收站
@?/rdbms/admin/utlrp.sql
SET SERVEROUTPUT ON;
EXECUTE DBMS_PREUP.INVALID_OBJECTS;
- 删除回收站
PURGE dba_recyclebin;
4.4.3 使用emremove.sql删除EM
- 从 19c 的 Oracle Home 下拷贝以下脚本到源库的 Oracle Home(11.2) 下
cp /u01/app/oracle/product/19.3.0/db_1/rdbms/admin/olspreupgrade.sql /u01/app/oracle/product/11.2.0/rdbms/admin/olspreupgrade.sql
sqlplus / as sysdba
@?/rdbms/admin/olspreupgrade.sql
4.4.4 删除EM
- 从 19c 的 Oracle Home 下拷贝以下脚本到源库的 Oracle Home(11.2) 下
cp /u01/app/oracle/product/19.3.0/db_1/rdbms/admin/emremove.sql /u01/app/oracle/product/11.2.0/rdbms/admin/emremove.sql
sqlplus / as sysdba
@?/rdbms/admin/emremove.sql
4.4.5 取消对OLAP目录(OLAP AMD)的支持(适用于12.1之前的Oracle数据库版本)
- 从 19c 的 Oracle Home 下拷贝以下脚本到源库的 Oracle Home(11.2) 下
Cp /u01/app/oracle/product/19.3.0/db_1/olap/admin/catnoamd.sql $ORACLE_HOME/olap/admin/catnoamd.sql
sqlplus / as sysdba
@?/olap/admin/catnoamd.sql
4.4.6 禁用计划的数据库自定义JOB和crontab计划任务
@?/rdbms/admin/catnoexf.sql
-
-
- 检查用户当前不区分大小写的密码版本。
-
--查看隐含参数_optimizer_cartesian_enabled,确保设置为TRUE
SELECT name,description from SYS.V$PARAMETER WHERE name LIKE '\_%' ESCAPE '\';
alter system set "_optimizer_cartesian_enabled"=TRUE;
4.5 正式升级
4.5.1修改数据库参数cluster_database为false并关闭实例
alter system set cluster_database=false scope=spfile;
shutdown immediate
4.5.2 以19C ORACLE_HOME对数据库以升级模式启动实例
修改Oracle_home 环境变量指向19C的ORACLE_HOME
startup upgrade
4.5.3 切换目录 然后执行脚本升级
接下来就是升级数据字典----- @?/rdbms/admin/catupgrd.sql
按照输出的提示进行升级
cd $ORACLE_HOME/rdbms/admin
$ORACLE_HOME/perl/bin/perl catctl.pl -n 24 catupgrd.sql ---并行升级
4.5.4 升级后补充运行脚本
要是手动升级数据库,但是未运行脚本catuppst.sql脚本,则数据库的性能随着时间下降。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 24 -e -b catuppst -d "." catuppst.sql
4.5.5 编译无效对象:
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 24 -e -b utlrp -d "." utlrp.sql
4.5.6 升级时区
- 启动数据库
Startup
- 检查timezone_file脚本:
@?/rdbms/admin/utltz_upg_check.sql
- 设置timezone_file脚本:
@?/rdbms/admin/utltz_upg_apply.sql
4.5.7 修改数据库参数:
alter system set resource_manager_plan=default_plan;
grant administer database trigger to SYS;
grant administer database trigger to system;
alter system set cluster_database=true scope=spfile;
4.6 实例重新注册到RAC集群
4.6.1 先通过11G Oracle_home remove掉当前集群的实例
Export ORACLE_HOME= /u01/app/oracle/product/11.2.0
srvctl remove database -d hisdb
4.6.2 切换回19C的 Oracle_home add 实例资源
注册实例前,所有节点的ORACLE_HOME需改为19C的HOME目录
Export ORACLE_HOME= /u01/app/oracle/product/19.3.0/db_1
srvctl add database -d hisdb -o $ORACLE_HOME
srvctl add instance -d hisdb -i hisdb1 -n his01
srvctl add instance -d hisdb -i hisdb2 -n his02
- 启动实例
启动前修改spfile文件,拷贝inithisdb.ora及orapwhisdb.ora文件至2节点
添加如下参数:
hisdb2.instance_number=2
hisdb2.thread=2
hisdb2.undo_tablespace='UNDOTBS2'