Prepare the PDB for Upgrade
The PDB must be prepared for upgrade, then unplugged from the source container databases.
Switch to the “cdb1” instance in the “126.96.36.199” environment.
export ORACLE_BASE=/u01/app/oracle export ORAENV_ASK=NO export ORACLE_SID=cdb1 . oraenv export ORAENV_ASK=YES sqlplus /nolog
From Oracle 12.2 onward the “preupgrd.sql” script has been removed and replaced by the “preupgrade.jar” file, which is run as follows. The “preupgrade.jar” file is shipped with the Oracle software, but you should really download the latest version.
$ORACLE_HOME/jdk/bin/java -jar /u01/app/oracle/product/188.8.131.52/db_1/rdbms/admin/preupgrade.jar TERMINAL TEXT -c "pdb1"
The resulting output is similar to the “preupgrd.sql” script, an example of which is shown below.
Run the “preupgrd.sql” script from the “184.108.40.206” home, not the current 220.127.116.11 home!
CONN / AS SYSDBA ALTER SESSION SET CONTAINER=pdb1; @/u01/app/oracle/product/18.104.22.168/db_1/rdbms/admin/preupgrd.sql
The output displays the generated scripts, including the “preupgrade.log” file. Both the log file and fixup scripts will be in the “$ORACLE_BASE/cfgtoollogs” directory or the “$ORACLE_HOME/cfgtoollogs” directory, depending on whether the $ORACLE_BASE has been specified or not. Run the fixup script and perform any manual tasks listed in the “preupgrade.log” file. These should be listed by the “preupgrade_fixups.sql” script also.
CONN / AS SYSDBA ALTER SESSION SET CONTAINER=pdb1; @/u01/app/oracle/cfgtoollogs/cdb1/preupgrade/preupgrade_fixups.sql SQL> EXEC DBMS_STATS.gather_dictionary_stats;
Connect to the root container and unplug the PDB.
CONN / AS SYSDBA ALTER PLUGGABLE DATABASE pdb1 CLOSE; ALTER PLUGGABLE DATABASE pdb1 UNPLUG INTO '/tmp/pdb1.xml'; EXIT;
You have a couple of options about how to deal with the source pluggable database.
-- Option 1 -- 1) Drop the PDB, but keep the datafiles. DROP PLUGGABLE DATABASE pdb1 KEEP DATAFILES; -- 2) Copy the files to the destination location. -- 2) Manually clean up the files. -- Option 2 -- 1) Copy the files to the destination location. -- 2) Drop the PDB, including the datafiles, as they have already been copied to the destination. DROP PLUGGABLE DATABASE pdb1 INCLUDING DATAFILES;
Upgrade the PDB
The PDB must be plugged into the destination CDB and upgraded.
Switch to the “cdb2” instance in the “22.214.171.124” environment.
export ORACLE_BASE=/u01/app/oracle export ORAENV_ASK=NO export ORACLE_SID=cdb2 . oraenv export ORAENV_ASK=YES sqlplus /nolog
Plugin the “pdb1” pluggable database into the “cdb2” container.
CONN / AS SYSDBA CREATE PLUGGABLE DATABASE pdb1 USING '/tmp/pdb1.xml' FILE_NAME_CONVERT=('/oradata/cdb1/pdb1', '/oradata/cdb2/pdb1'); ALTER PLUGGABLE DATABASE pdb1 OPEN UPGRADE; Warning: PDB altered with errors. SQL> EXIT;
Don’t worry about the “Warning: PDB altered with errors.” message at this point.
Run the “catupgrd.sql” script against the PDB. Notice the use of the “-c” flag to specify an inclusion list. If you were upgrading multiple PDBs, you could list them in a space-separated list so they are all upgraded in a single step.
cd $ORACLE_HOME/rdbms/admin $ORACLE_HOME/perl/bin/perl catctl.pl -c "pdb1" -l /tmp catupgrd.sql
Start the PDB and recompile any invalid objects.
CONN / AS SYSDBA ALTER SESSION SET CONTAINER=pdb1; STARTUP; @?/rdbms/admin/utlrp.sql
Run the “postupgrade_fixups.sql” script. Remember to perform any recommended manual steps.
@/u01/app/oracle/cfgtoollogs/cdb1/preupgrade/postupgrade_fixups.sql SQL> EXECUTE DBMS_STATS.gather_fixed_objects_stats;
The PDB upgrade is now complete.