一 说明
1.1
环境说明
整个异机迁移升级文档分为以下几部分:
|
操作步骤 |
操作内容 |
|
Step 1 |
搭建目标环境(安装 Oracle 11g Rdbms 软件) |
|
Step 2 |
生产库预升级检查 |
|
Step 3 |
目标环境确认 |
|
Step 4 |
目标库正式升级 |
|
Step 5 |
目标库升级后检查 |
本文档省略目标环境 Oracle 11g Rdbms 搭建步骤,只说明在目标环境部署之后整个异机迁移升级的实施过程。
1.2 目标环境部署
➤ 在目标服务器安装 Oracle 11.2.0.4 数据库软件
➤ 在软件安装完成之后,手动创建监听
二 生产库预升级检查
2.1 备份(冷备/ 热备 )
若原地升级,强烈建议对生产库进行全库备份(冷备 / 热备)。若采用异机迁移升级,(即原生产库正常可用),则跳过此步。
2.2 归档空间分配
若数据库处于归档模式,则需要预留足够的归档日志空间。若数据库归档未开,则跳过此步。
2.3 回收站清理
清空数据库回收站
|
SQL> PURGE DBA_RECYCLEBIN; |
2.4 收集数据字典统计信息
|
SQL> EXEC dbms_stats.gather_dictionary_stats; |
2.5 检查数据库组件
系统组件状态确认。若组件状态均为 VALID , 则表示正常
|
SQL> set line 200 SQL> select COMP_ID,COMP_NAME,VERSION,STATUS from dba_registry; |
系统对象状态确认。若没有返回记录,则表示正常
|
SQL> select object_name,status from dba_objects where owner='SYS' and status<>'VALID'; |
2.6 统计数据库无效对象
无效对象收集
|
sqlplus /as sysdba SQL> spool invalid_obj_col.log SQL> select owner,object_name,object_type,status from dba_objects where status<>'VALID'; SQL> spool off SQL> select count(*),status from dba_objects group by status; SQL> create table invalid_object_20170601 as select * from dba_objects where status<>’VALID’; |
2.7 无效对象编译
|
SQL> @?/rdbms/admin/utlrp.sql |
2.8 Temp 文件检查
|
SQL> col file_name for a50 SQL> set line 200 SQL> select tablespace_name,file_name,bytes/1024/1024 M,status from dba_temp_files order by 1; |
2.9 检查文件备份模式
确认是否有文件处于备份模式。若有,则调整;若没有返回记录则正常
|
SQL> SELECT * FROM v$backup WHERE status != 'NOT ACTIVE'; |
2.10 Sys 和System 重复对象检查 文件检查
确认是否有以下 4 行红色记录返回,若是,则正常
|
SQL> select object_name, object_type from dba_objects where (object_name,object_type) in (select object_name,object_type from dba_objects where owner = 'SYS') and owner ='SYSTEM'; OBJECT_NAME OBJECT_TYPE ---------------------------------- ------------------- AQ$_SCHEDULES TABLE AQ$_SCHEDULES_PRIMARY INDEX DBMS_REPCAT_AUTH PACKAGE DBMS_REPCAT_AUTH PACKAGE BODY |
2.11 执行预升级检查脚本
从目标服务器拷贝 $ORACLE_HOME/rdbms/admin/utlu112i.sql 至生产服务器 C:\upgrade 文件夹下
手动执行预升级脚本 C:\upgrade\utlu112i.sql
|
sqlplus / as sysdba SQL> spool upgeade_info.log SQL> @utlu112i.sql SQL> spool off |
注:不同数据库,配置可能不同,输出日志也是各样,根据预升级脚本输出日志进行调整。
2.12 创建初始化参数文件
参数文件路径、名称均可自定义
|
SQL> create pfile='C:\upgrade\initorcl.ora' from spfile; |
2.13 停生产库
由于需要拷贝数据文件、联机日志文件、控制文件、临时文件至目标服务器,确保数据一致,因此需要停生产库
|
SQL> shutdown immediate; |
三 目标环境确认
3.1 Rdbms 软件检查
确认 Oracle 11.2.0.4 数据库软件安装无误
确认监听已经配置并打开
3.2 参数文件拷贝
将 10g 软件下 C:\upgrade\initorcl.ora 参数文件拷贝至将 11g 软件 $ORACLE_HOME\database
3.3 密码文件拷贝
将 10g 软件 $ORACLE_HOME\database 下密码文件拷贝至将 11g 软件 $ORACLE_HOME\database
3.4 数据文件拷贝
将 10g 环境数据文件拷贝至 11g 目标端指定位置(停机拷贝)
3.5 临时文件拷贝
将 10g 环境临时文件拷贝至 11g 目标端指定位置(停机拷贝)
3.6 联机日志文件拷贝
将 10g 环境联机日志文件拷贝至 11g 目标端指定位置(停机拷贝)
3.7 控制文件拷贝
将 10g 环境控制文件拷贝至 11g 目标端指定位置(停机拷贝)
注意:若目标端数据文件、临时文件、联机日志文件、控制文件路径与生产端不一致,则需手动修改 rename
3.8 修改参数文件
参数模板
|
*.audit_file_dest='C:\app\Administrator\admin\xuh\adump' *.compatible='10.2.0.3.0' *.control_files='C:\app\Administrator\oradata\xuh\control01.ctl','C:\app\Administrator\oradata\xuh\control02.ctl','C:\app\Administrator\oradata\xuh\control03.ctl' *.core_dump_dest='C:\app\Administrator\admin\xuh\cdump' *.db_block_size=8192 *.db_domain='' *.db_file_multiblock_read_count=16 *.db_name='xuh' *.db_recovery_file_dest='C:\app\Administrator\recovery' *.db_recovery_file_dest_size=1073741824 *.dispatchers='(PROTOCOL=TCP) (SERVICE=xuhXDB)' *.job_queue_processes=10 *.nls_language='SIMPLIFIED CHINESE' *.nls_territory='CHINA' *.open_cursors=300 *.pga_aggregate_target=633339904 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=1610612736 *.undo_management='AUTO' *.undo_tablespace='UNDOTBS1' *.diagnostic_dest='C:\app\Administrator' |
注意:
*.audit_file_dest
*.control_files
*.db_recovery_file_dest
以上三个参数需要修改成实际路径
*.background_dump_dest
*.user_dump_dest
以上两个参数合并成以下参数
*.diagnostic_dest=$ORACLE_BASE ( 修改成实际路径 )
3.9 修改目标库文件路径
若目标库数据文件、临时文件、联机日志文件、控制文件路径与生产端不一致,则需手动修改。否则, 跳过 3.9 。
目标库启动至 mount 状态
|
Sqlplus / as sysdba SQL> startup mount; |
批量查询修改语句
数据文件
|
SQL> Set line 200 SQL> Set pagesize 0 SQL> select 'alter database rename file '||''''||name||''''||' to '||''''||' 实际路径 '||substr(name,instr(name,'\',-1)+1)||''';' from v$datafile; |
联机日志文件
|
SQL> Set line 200 SQL> Set pagesize 0 SQL> select 'alter database rename file '||''''||member||''''||' to '||''''||' 实际路径 '||substr(member,instr(member,'\',-1)+1)||''';' from v$logfile; |
临时文件
|
SQL> Set line 200 SQL> Set pagesize 0 SQL> select 'alter database rename file '||''''||name||''''||' to '||''''||' 实际路径 '||substr(name,instr(name,'\',-1)+1)||''';' from v$tempfile; |
停目标库
|
Sqlplus / as sysdba SQL> shutdown immediate; |
四 目标库正式升级
4.1 以upgrade 模式启动目标库
在 Oracle 11g 环境下,以升级模式打开目标库
|
$sqlplus / as sysdba SQL> startup upgrade; |
4.2 执行升级脚本
|
Sqlplus / as sysdba SQL> spool upgrade20170601.log SQL> @?/rdbms/admin/catupgrd.sql SQL> spool off SQL> shutdown immediate; # 若数据库已经停止,则跳过此步 SQL> startup; SQL> @?/rdbms/admin/utlrp.sql |
该脚本执行时间约为 2 小时
五 目标库升级后检查
5.1 检查数据库组件
系统组件状态确认
|
SQL> col COMP_NAME for a60 SQL> set line 200 SQL> select COMP_ID,COMP_NAME,VERSION,STATUS from dba_registry; |
5.2 统计数据库无效对象
无效对象收集
|
sqlplus /as sysdba SQL> select owner,object_name,object_type,status from dba_objects where status<>'VALID'; SQL> select count(*),status from dba_objects group by status; |
5.3 无效对象编译
|
SQL> @?/rdbms/admin/utlrp.sql |
5.4 数据字典信息收集
|
SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS; |