之前的博客我们了解了通过autoupgrade工具将11g 升级得到19c non-cdb的过程,如下:
Oracle 11g 升级到19c 操作示例 — AutoUpgrade 工具(NON-CDB)
https://www.cndba.cn/dave/article/131640
本篇我们来补充一下通过autoupgrade工具将11g 升级得到19c cdb的过程,这里相关重复内容直接省略。
使用non-cdb的优点是业务侧是透明的,迁移前后实例名是一样的,如果是CDB架构,需要确保pdb名称和之前是一样,否则业务连接就会异常。
1 兼容性检查
因为只有特定的版本才能升级到19c,所以在升级之前,需要先检查下当前兼容性参数。如果源端版本是 11.2.0.4,但 compatible 参数是设置为10.0.0,就会导致失败,需要先将compatible参数设置为至少支持升级的最小值(11.2.0),然后再升级。
SQL> set lines 160
SQL> show parameter compatible;
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
compatible string 11.2.0.4.0
SQL>
如果不满足,需要先修改参数,更改参数后,重启动数据库生效:
SQL> alter system set compatible=’11.2.0’ scope=spfile;
2 备份数据库
升级是高危动作,需要先使用RMAN 备份,具体步骤这里忽略。
3 安装19c 软件
Oracle有2种升级方法:In-Place和Out-of-Place。这种大版本升级,一般推荐使用out-of-place,所以需要先安装一套19c的软件,不创建实例。
图形化部署可以参考如下博客:
Linux 7.4 平台下 Oracle 19.3 单实例安装手册
https://www.cndba.cn/dave/article/3427
我们这里用静默方式快速部署一套,前期准备工作我这里忽略,具体可以参考上面的链接。
注意:
- 升级为PDB之前,必须先创建好CDB,autoupgrade不会创建CDB,可以直接使用dbca命令创建。
- CDB的字符集尽可能和PDB的保持一致,或者大一些。
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL>
4 升级前信息检查
4.1 替换AutoUpgrade 工具版本
Oracle 19c 自带autoupgrad工具,在$ORACLE_HOME/rdbms/admin目录下,我们用官网的最新版本替代一下。
[dave@cndba.cn admin]$ ll autoupgrade*
-rw-r--r--. 1 oracle oinstall 6530319 May 26 12:12 autoupgrade_25.3.jar
-rw-r--r--. 1 oracle oinstall 3360892 Feb 9 2019 autoupgrade.jar.bak
[dave@cndba.cn admin]$ mv autoupgrade_25.3.jar autoupgrade.jar
[dave@cndba.cn admin]$ ll autoupgrade*
-rw-r--r--. 1 oracle oinstall 6530319 May 26 12:12 autoupgrade.jar
-rw-r--r--. 1 oracle oinstall 3360892 Feb 9 2019 autoupgrade.jar.bak
[dave@cndba.cn admin]$ pwd
/u02/app/oracle/product/19.0.0/dbhome_1/rdbms/admin
4.2 创建autoupgrade配置文件
[dave@cndba.cn ~]$ cd /u01/software/
[dave@cndba.cn software]$ java -jar /u02/app/oracle/product/19.0.0/dbhome_1/rdbms/admin/autoupgrade.jar -create_sample_file config
Created sample configuration file /u01/software/sample_config.cfg
sample_config.cfg 文件中会有示例的配置,可以参考。
我们这里直接清空,使用如下配置:
[dave@cndba.cn software]$ echo '' > sample_config.cfg
[dave@cndba.cn software]$ cat sample_config.cfg
global.autoupg_log_dir=/tmp/autoupgrade_log
global.dictionary_stats_after=yes
global.dictionary_stats_before=yes
global.fixed_stats_before=yes
global.restoration=yes
global.raise_compatible=yes
global.drop_grp_after_upgrade=yes
upg1.dbname=orcl
upg1.sid=orcl
upg1.start_time=NOW
upg1.source_home=/u01/app/oracle/product/11.2.0/db_1
upg1.target_home=/u02/app/oracle/product/19.0.0/dbhome_1
upg1.target_cdb=cdb19c
#upg1.target_pdb_name=orcl
upg1.target_pdb_name=dave
upg1.target_pdb_copy_option=file_name_convert=('orcl','orcl')
upg1.log_dir=/tmp/autoupgrade_log/orcl
upg1.upgrade_node=ora11g
dbold.run_utlrp=yes
dbold.timezone_upg=yes
upg1.target_version=19
upg1.remove_underscore_parameters=yes
upg1.source_tns_admin_dir=/u01/app/oracle/product/11.2.0/db_1/network/admin
upg1.target_tns_admin_dir=/u02/app/oracle/product/19.0.0/dbhome_1/network/admin
注意: 这里建议upg1.sid 和 upg1.target_pdb_name 2个参数配置成一样的,如果设置成不一样,创建的pdb名称也会不一样,业务侧就需要修改数据源中的实例名。
4.3 analyze 分析
通过分析用来判断条件是否满足升级,如果不满足,也会给出整改建议。
[dave@cndba.cn software]$ java -jar /u02/app/oracle/product/19.0.0/dbhome_1/rdbms/admin/autoupgrade.jar -config /u01/software/sample_config.cfg -mode analyze
AutoUpgrade 25.3.250509 launched with default internal options
Processing config file ...
+--------------------------------+
| Starting AutoUpgrade execution |
+--------------------------------+
1 Non-CDB(s) will be analyzed
Type 'help' to list console commands
upg>
注意这里可能会等很久:
upg> -------------------------------------------------
job 101 has not shown progress in last 25 minutes
database [orcl]
Stage [PRECHECKS]
Operation[EXECUTING]
Status [RUNNING]
Info [Loading database information]
[Review log files for further information]
-----------------------------------------------
Logs: /tmp/autoupgrade_log/orcl/orcl/101
-----------------------------------------------Job 101 completed
------------------- Final Summary --------------------
Number of databases [ 1 ]
Jobs finished [1]
Jobs failed [0]
Please check the summary report at:
/tmp/autoupgrade_log/cfgtoollogs/upgrade/auto/status/status.html
/tmp/autoupgrade_log/cfgtoollogs/upgrade/auto/status/status.log
[dave@cndba.cn software]$
看到这里才是最终的完成。
4.4 查看日志并修复
Logs: /tmp/autoupgrade_log/orcl/orcl/101
[root@ora11g prechecks]# pwd
/tmp/autoupgrade_log/orcl/orcl/101/prechecks
[root@ora11g prechecks]# ll
total 472
-rw-r-----. 1 oracle oinstall 5816 Jun 25 19:10 orcl_checklist.cfg
-rw-r-----. 1 oracle oinstall 21417 Jun 25 19:10 orcl_checklist.json
-rw-r-----. 1 oracle oinstall 20409 Jun 25 19:10 orcl_checklist.xml
-rw-r-----. 1 oracle oinstall 44071 Jun 25 19:10 orcl_preupgrade.html
-rw-r-----. 1 oracle oinstall 21584 Jun 25 19:10 orcl_preupgrade.log
-rw-r-----. 1 oracle oinstall 315728 Jun 25 19:10 prechecks_orcl.log
-rw-r-----. 1 oracle oinstall 39982 Jun 25 19:10 upgrade.xml
[root@ora11g prechecks]#
可以查看orcl_preupgrade.log 或者orcl_preupgrade.html。
这里的建议有2种: REQUIRED ACTIONS 和 RECOMMENDED ACTIONS。 其中RECOMMENDED ACTIONS 基本都是能够AUTOFIXUP的,所以我们这里只需要处理REQUIRED ACTIONS。
升级前源库执行修复脚本:
[dave@cndba.cn software]$ java -jar /u02/app/oracle/product/19.0.0/dbhome_1/rdbms/admin/autoupgrade.jar -config /u01/software/sample_config.cfg -mode fixups
5 升级数据库
5.1 deploy升级数据库
[dave@cndba.cn ~]$ java -jar /u02/app/oracle/product/19.0.0/dbhome_1/rdbms/admin/autoupgrade.jar -config /u01/software/sample_config.cfg -mode deploy
AutoUpgrade 25.3.250509 launched with default internal options
Processing config file ...
+--------------------------------+
| Starting AutoUpgrade execution |
+--------------------------------+
1 Non-CDB(s) will be processed
Type 'help' to list console commands
upg>
5.2 网页监控升级进度
在autoupgrade的命令行中可以查看升级的进度,也可以通过web 页面查看,启动server:
[dave@cndba.cn ~]$ cd /tmp/autoupgrade_log/cfgtoollogs/upgrade/auto
[dave@cndba.cn auto]$ python -m SimpleHTTPServer 8000
Serving HTTP on 0.0.0.0 port 8000 ...
然后通过页面访问:
5.3 查看升级日志
autoupgrade会提示日志的保存路径:
Logs: /tmp/autoupgrade_log/orcl/orcl/102
[dave@cndba.cn 110]$ pwd
/tmp/autoupgrade_log/orcl/orcl/110
[dave@cndba.cn 110]$ ll
total 932
-rw-r-----. 1 oracle oinstall 939169 Jun 30 16:05 autoupgrade_20250630.log
-rw-r-----. 1 oracle oinstall 6869 Jun 30 16:05 autoupgrade_20250630_user.log
-rw-r-----. 1 oracle oinstall 0 Jun 30 15:06 autoupgrade_err.log
drwxr-x---. 2 oracle oinstall 4096 Jun 30 15:44 dbupgrade
drwxr-x---. 2 oracle oinstall 49 Jun 30 15:07 drain
drwxr-x---. 2 oracle oinstall 150 Jun 30 16:05 noncdbtopdb
drwxr-x---. 2 oracle oinstall 188 Jun 30 15:45 postchecks
drwxr-x---. 3 oracle oinstall 167 Jun 30 15:52 postfixups
drwxr-x---. 2 oracle oinstall 191 Jun 30 15:54 postupgrade
drwxr-x---. 2 oracle oinstall 185 Jun 30 15:06 prechecks
drwxr-x---. 2 oracle oinstall 134 Jun 30 15:07 prefixups
drwxr-x---. 2 oracle oinstall 28 Jun 30 15:06 preupgrade
drwxr-x---. 2 oracle oinstall 28 Jun 30 16:05 sysupdates
[dave@cndba.cn 110]$
6 升级后工作
6.1 查看PDB
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 DAVE READ WRITE NO
SQL>
SQL> show con_name
CON_NAME
------------------------------
DAVE
SQL>
SQL> select name,pdb from v$services order by 1;
NAME PDB
------------------------------ ------------------------------
SYS$BACKGROUND CDB$ROOT
SYS$USERS CDB$ROOT
cdb19c CDB$ROOT
cdb19cXDB CDB$ROOT
dave DAVE
可以看到pdb的名称是我们配置文件中指定的dave,所以生产迁移建议和旧环境的sid保持一致。
SQL> col name for a60
SQL> select name from v$datafile;
NAME
------------------------------------------------------------
/u01/app/oracle/oradata/dave/system01.dbf
/u01/app/oracle/oradata/dave/sysaux01.dbf
/u01/app/oracle/oradata/dave/undotbs01.dbf
/u01/app/oracle/oradata/dave/users01.dbf
/u01/app/oracle/oradata/dave/example01.dbf
/u01/app/oracle/oradata/dave/dave01.dbf
/u01/app/oracle/oradata/dave/dave02.dbf
7 rows selected.
[dave@cndba.cn admin]$ sqlplus cndba/cndba@DAVE
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Jun 30 19:47:39 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-28002: the password will expire within 7 days
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> show con_name
CON_NAME
------------------------------
DAVE
SQL>
如果连接pdb 报错可以参考如下博客:
Oracle 19c 连接PDB ORA-01034 错误说明
https://www.cndba.cn/dave/article/131665
6.2 确认 COMPATIBLE 参数
因为我们在配置了global.raise_compatible=yes,所以这里会自动帮我修改:
SQL> show parameter compatible;
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
compatible string 19.0.0
noncdb_compatible boolean FALSE
SQL>
6.3 确认监听文件
因为我们在配置了upg1.target_tns_admin_dir参数,所以相关的监听和tns 也会自动创建。
[dave@cndba.cn admin]$ pwd
/u02/app/oracle/product/19.0.0/dbhome_1/network/admin
[dave@cndba.cn admin]$ ll
total 16
-rw-r-----. 1 oracle oinstall 586 Jun 30 15:52 listener.ora
drwxr-xr-x. 2 oracle oinstall 64 Apr 17 2019 samples
-rw-r--r--. 1 oracle oinstall 1536 Feb 14 2018 shrept.lst
-rw-r-----. 1 oracle oinstall 266 Jun 30 15:52 sqlnet.ora
-rw-r-----. 1 oracle oinstall 615 Jun 30 15:52 tnsnames.ora
[dave@cndba.cn admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u02/app/oracle/product/19.0.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
CDB19C =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora11g)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cdb19c)
)
)
LISTENER_CDB19C =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora11g)(PORT = 1522))
# start-delta orcl
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora11g)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
# end-delta orcl
[dave@cndba.cn admin]$
6.4 删除源库相关文件
[dave@cndba.cn db_1]$ pwd
/u01/app/oracle/product/11.2.0/db_1
[dave@cndba.cn db_1]$ rm -rf /u01/app/oracle/product/11.2.0/db_1
版权声明:本文为博主原创文章,未经博主允许不得转载。