天天看点

物理方式将oracle 10.2.0.1升级到10.2.0.5的记录

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';

最后测试确认业务运行使用正常,此次迁移升级成功。