1、背景
某客户新建项目采购了新的服务器,由于驱动问题新服务器能兼容的最低版本的windows操作系统为Windows server 2008 R2版本,但是客户原有的业务系统运行平台为Windows 2003+Oracle 10.2.0.1,现在需要将业务系统从老服务器迁移至新采购的服务器。在新服务器上安装10.2.0.1的时候发现点击setup.exe程序就会出现闪退,即使采用兼容模式运行现象依旧,经过一番尝试以后发现还是无法安装成功,发现是Windows server 2008 R2不支持10.2.0.1导致,最后和客户协商对数据库版本进行升级,将数据库版本直接由10.2.0.1升级到10.2.0.5。
2、升级方式分析
在源库经过查询,里面存在大量的LOB字段数据,如果采用expdp逻辑导出再impdp逻辑导入需要时间很长,客户无法接受宕机时间,最后在rman迁移和物理拷贝之间选择物理拷贝的方式进行升级操作。
3、升级步骤
3.1、升级前提
目标端服务器需要已安装好服务器操作系统以及Oracle 10.2.0.5数据库,并测试目标端的服务器的稳定性、可靠性、可用性。
3.2、操作步骤
a、生产业务停机
下发中断业务通知-->停止数据库监听(lsnrctl stop)-->KILL 活动会话-->手动触发一致性检查点(alter system checkpoint;)-->一致性关库(shutdown immediate)-->widows 服务管理停止oracle service服务以及oracle监听服务。
b、清空新服务器上的数据文件、日志文件、控制文件,将生产端的数据文件、日志文件、控制文件拷贝至新搭建的环境的相同路径下(根据数据量进行一段时间的等待)
c、在新服务器上使用oracle 10.2.0.5的参数文件将数据库以升级的方式打开
sqlplus / as sysdba
SQL>startup upgrade;
d、执行带库升级脚本以及性能视图脚本
SQL>@?/rdbms/admin/catupgrd.sql;
SQL>@?/rdbms/admin/catalog.sql
e、关闭数据库
shutdown immediate;
f、开库跑重新编译无效对象脚本发先编译无效对象报错
SQL>startup;
SQL>@?/rdbms/admin/utlrp.sql
ORA-04063: package body "SYS.DBMS_REGISTRY_SYS" has errors
ORA-06508: PL/SQL: could not find program unit being called:
"SYS.DBMS_REGISTRY_SYS"
ORA-06512: at line 1
4、解决报错
根据报错发现是DBMS_REGISTRY_SYS包失效了,此包失效可以通过在重新执行一遍prvtcr.plb脚本:
SQL>@?/rdbms/admin/prvtcr.plb
select procedure, status from dba_registry;
执行完成后再此执行编译无效脚本成功
SQL>@?/rdbms/admin/utlrp.sql
查看无效对象个数
SELECT OBJECT_NAME FROM DBA_OBJECTS WHERE STATUS = 'INVALID';
最后测试确认业务运行使用正常,此次迁移升级成功。