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 2
| SELECT o.name FROM sys.obj$ o, sys.user$ u, sys.sum$ s WHERE o.type# = 42 AND bitand(s.mflags, 8) =8;
|
确认没有处于备份模式的文件
1
| SELECT * FROM v$backup WHERE status != 'NOT ACTIVE';
|
确认没有文件需要恢复
1
| SELECT * FROM v$recover_file
|
处理未完成的分布式事物
1 2 3 4 5
| SELECT * FROM dba_2pc_pending;
SELECT local_tran_id FROM dba_2pc_pending; EXECUTE dbms_transaction.purge_lost_db_entry(''); commit;
|
确保主备同步
1 2 3
| SELECT SUBSTR(value,INSTR(value,'=',INSTR(UPPER(value),'SERVICE'))+1) FROM v$parameter WHERE name LIKE 'log_archive_dest%' AND UPPER(value) LIKE 'SERVICE%';
|
清除回收站
手动删除DB Control
主要目的是为了减少停机时间
1 2 3
| emctl stop dbconsole
@emremove.sql
|
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| [oracle@xb ~]$ export ORACLE_SID=test [oracle@xb ~]$ ss
SQL*Plus: Release 12.2.0.1.0 Production on Tue Dec 11 14:45:49 2018
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
USERNAME INST_NAME HOST_NAME SID SERIAL -------------------- -------------------- ------------------------- ----- -------- ---------- -------- ---------- ----- --------------- ---------------- ---------------- SYS test-test xb.oracle.com 51 21129 12.2.0.1.0 20181211 9203 39 9202 000000006D32F050 000000006D5A76F8
sys@TEST> SELECT name, open_mode FROM v$database;
NAME OPEN_MODE --------------------------- ------------------------------------------------------------ TEST READ WRITE
|