通过DBUA升级11g到12.2
12c已经出来了很长时间,公司的11g系统可能都考虑升级到12c,整理一下相关操作。这篇文章都是在实验环境上,所以有些不必要的步骤就没有一一做完,如果是生产环境则需要认真读一下官方文档Database Upgrade Guide 12.2
看一下升级到最新的12.2可以通过哪些途径
Current Release | Upgrade Options |
---|---|
12.1.0.1, 12.1.0.2 11.2.0.3 or later |
可以直接升级,参考对应版本的升级手册即可 |
11.2.0.1, 11.2.0.2 11.1.0.6, 11.1.0.7 10.2.0.2, 10.2.0.3, 10.2.0.4 and 10.2.0.5 10.1.0.5 9.2.0.8 or earlier |
无法直接升级到12.2 |
解决办法:先升级到最新可以直接升级的版本。
例如现在是10.2.0.5则先升级到11.2.0.4,再从11.2.0.4升级到12.2
先决条件
执行升级过程之前,有大量的准备工作要检查,必须要对着文档仔细检查,保证升级过程的顺利完成。
具体参考前面所述文档的Database Preparation Tasks to Complete Before Starting Oracle Database Upgrades部分
部分内容在后面的DBUA环节也可以勾选处理
搜集统计信息以减少停机时间
1 | EXEC DBMS_STATS.GATHER_DICTIONARY_STATS; |
确认物化视图全部刷新完成
1 | SELECT o.name FROM sys.obj$ o, sys.user$ u, sys.sum$ s |
确认没有处于备份模式的文件
1 | SELECT * FROM v$backup WHERE status != 'NOT ACTIVE'; |
确认没有文件需要恢复
1 | SELECT * FROM v$recover_file; |
处理未完成的分布式事物
1 | SELECT * FROM dba_2pc_pending; |
确保主备同步
1 | SELECT SUBSTR(value,INSTR(value,'=',INSTR(UPPER(value),'SERVICE'))+1) |
清除回收站
1 | PURGE DBA_RECYCLEBIN |
手动删除DB Control
主要目的是为了减少停机时间
1 | emctl stop dbconsole |
emremove.sql执行完毕后,需要手动删除ORACLE_HOME/HOSTNAME_SID and ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_HOSTNAME_SID两个目录
编译失效对象
1 | @?/rdbms/admin/utlrp.sql |
DBUA升级
最方便的办法就是通过DBUA工具,图形化界面也直观容易操作,本身就提供了一些必要的升级前检查,只要安装了数据库软件,工具就自带了。
我的环境已经装好了12c的库,所以直接切换到12c环境变量下,执行dbua
这里碰到个小问题,Pre-upgrade fails - SEVERE: For input string: “Us”,注意要unset ORACLE_PATH
选择要升级的库,下一步
都是一些warning 可以忽略
勾选一些升级前必要步骤
选择回退方案,我这里选择不备份
选择LISTENER,我是配置在11g里
EM配置
确认下信息,点击finish
upgrade完成以后,点击Upgrade Results
升级完毕的database现在已经可以使用了
1 | [oracle@xb ~]$ export ORACLE_SID=test |