一 从早期版本CDB拔出早期版本PDB
1、在PDB上运行升级前信息工具。
例如,salespdbCDB中运行的名为PDB 的位置$ORACLE_HOME_12.2:

$ORACLE_BASE/product/12.1.0/dbhome_1/jdk/bin/java -jar  /u01/app/oracle/product/19.3.0/dbhome_1/rdbms/admin/preupgrade.jar dir /tmp -c salespdb

Unplugging, Plugging, and Upgrading a PDB to a New
2、preupgrade_fixups.sql在您的源数据库上运行
例如:

CONNECT / AS SYSDBA
SQL> ALTER SESSION SET CONTAINER=salespdb;
SQL> @/tmp/preupgrade_fixups.sql

3、遵循中列出的所有建议preupgrade.log
Unplugging, Plugging, and Upgrading a PDB to a New
4、Oracle APEX
在12.1.0.2.0中默认安装,而在12.2.0.1.0未默认安装,如果不进行APEX卸载,在12.2.0.1.0中plug 12.1.0.2.0版本的pdb将报如下ORA-65346错误:
Unplugging, Plugging, and Upgrading a PDB to a New
当然,如果您有使用到APEX,需要在12.2.0.1.0中安装APEX,而无需卸载12.1.0.2.0中的APEX。
卸载方式:

SQL> select COMP_ID, STATUS from DBA_REGISTRY where COMP_ID='APEX'; 

COMP_ID                        STATUS
------------------------------ ----------------------
APEX                           VALID
$ cd $ORACLE_HOME/apex
$ sqlplus / as sysdba
SQL>@apxremov_con.sql

Unplugging, Plugging, and Upgrading a PDB to a New
Unplugging, Plugging, and Upgrading a PDB to a New_第1张图片
Unplugging, Plugging, and Upgrading a PDB to a New
5、关闭要拔出的PDB
例如,使用以下命令关闭PDB salespdb:

SQL> ALTER PLUGGABLE DATABASE salespdb CLOSE;

6、重新登录到CDB$ROOT:

CONNECT / AS SYSDBA
SQL> ALTER SESSION SET CONTAINER=CDB$ROOT;

7、 使用以下SQL命令语法拔出早期版本的PDB,其中pdbPDB的名称和pathPDB XML文件的位置:

ALTER PLUGGABLE DATABASE salespdb UNPLUG INTO '/home/oracle/salespdb.xml';

命令完成后,将显示以下响应:
Unplugging, Plugging, and Upgrading a PDB to a New
8、删除可插入数据库salespdb,但保留数据文件。
Oracle建议您执行salespdb此过程后清除CDB视图中的剩余信息,并避免将来出现问题。作为最佳实践指南,请首先将PDB备份到目标CDB中,然后DROP在源上发出命令。
要删除可插入数据库,请输入以下命令:

SQL> DROP PLUGGABLE DATABASE salespdb KEEP DATAFILES; 

Unplugging, Plugging, and Upgrading a PDB to a New
二 将早期版本的PDB插入更高版本的CDB
1、拷贝xml与数据文件
Unplugging, Plugging, and Upgrading a PDB to a New
Unplugging, Plugging, and Upgrading a PDB to a New
要将PDB从较早版本的CDB插入到较早版本的CDB,请使用以下CREATE PLUGGABLE DATABASE命令。
此过程示例说明了在使用Oracle管理的文件时如何插入PDB。有关插入PDB的更多信息,请参考《Oracle数据库管理员指南》。
连接到更高版本的CDB。使用以下SQL命令插入早期版本的PDB,其中pdbPDB path是PDB的名称,也是PDB XML文件所在的路径:
2、创建pdb

CREATE PLUGGABLE DATABASE salespdb USING '/home/oracle/salespdb.xml' SOURCE_FILE_NAME_CONVERT=('/u01/app/oracle/oradata/orcl/salespdb','/u01/app/oracle/oradata/ORCL/salespdb') nocopy tempfile reuse;

由于APEX导致
Unplugging, Plugging, and Upgrading a PDB to a New
解决方式:由于在unplugging 时没有卸载APEX,后续可删除xml文件中的
Unplugging, Plugging, and Upgrading a PDB to a New
不过后续会报很多错误。
命令完成后,将显示以下响应:
Unplugging, Plugging, and Upgrading a PDB to a New
Unplugging, Plugging, and Upgrading a PDB to a New_第2张图片
三 将早期版本的PDB升级到更高版本
在UPGRADE模式下打开的PDB 使用Parallel Upgrade Utility来将较早发行的PDB升级到CDB的发行级别。
1、切换到升级PDB
例如,输入以下命令以切换到PDB salespdb:

SQL> ALTER SESSION SET CONTAINER=salespdb;

2、在升级模式下打开PDB。

SQL> ALTER PLUGGABLE DATABASE OPEN UPGRADE;

Unplugging, Plugging, and Upgrading a PDB to a New
3、使用“并行升级实用程序”命令(catctl.pl或shell实用程序dbupgrade)升级PDB 。
升级PDB时,请使用通常与Parallel Upgrade Utility并行使用的命令。但是,您还可以添加选项以指定要升级的PDB。如以下示例所示,使用名为的PDB大写PDB的名称: -c PDBnamesalespdb

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catctl.pl -d  \
$ORACLE_HOME/rdbms/admin -c 'salespdb' -l $ORACLE_BASE catupgrd.sql

Unplugging, Plugging, and Upgrading a PDB to a New
Unplugging, Plugging, and Upgrading a PDB to a New_第3张图片
Unplugging, Plugging, and Upgrading a PDB to a New_第4张图片
4、查看结果
日志的默认文件路径在path中,其中Oracle基本路径,数据库名称以及升级的日期和时间。日期和时间字符串采用字符串格式YYYY MM DD HH MM SC,其中YYYY表示年,MM表示月,DD表示日,HH表示小时,MM表示分钟,SC表示秒。 Oracle_base/cfgtoollogs/dbname/upgradedatetimeOracle_basedbnameupgradedatetime例如:
Unplugging, Plugging, and Upgrading a PDB to a New_第5张图片
5、登录到SQL * Plus,然后打开PDB以执行升级后的修订,并重新编译INVALID数据库中的对象:

SQL> STARTUP;
SQL> ALTER SESSION SET CONTAINER=salespdb;

6、使用该实用程序catcon.pl运行脚本postupgrade_fixups.sql:

@/tmp/postupgrade_fixups.sql

7、使用该实用程序从目录catcon.pl运行:

@$ORACLE_HOME/rdbms/admin/utlrp.sql

该脚本将重新编译INVALID数据库中的对象,并将名称为的日志文件放置在当前目录中comp0.log。
Unplugging, Plugging, and Upgrading a PDB to a New_第6张图片

Unplugging, Plugging, and Upgrading a PDB to a New_第7张图片

Unplugging, Plugging, and Upgrading a PDB to a New