通过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
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%';

清除回收站

1
PURGE DBA_RECYCLEBIN

手动删除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# VERSION STARTED SPID OPID CPID SADDR PADDR
-------------------- -------------------- ------------------------- ----- -------- ---------- -------- ---------- ----- --------------- ---------------- ----------------
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