Migrate to Oracle 26ai without surprises

If you’re still using Oracle Database 19c and see the multitenant architecture as a significant upgrade, you’re not alone. With Oracle 26ai’s new features, you might already be thinking about upgrading, even though it’s natural to have questions about what this change involves.

But don’t worry, I’ll show you how simple it can be to migrate from non-CDB to CDB and, in the process, upgrade to 26ai—all with the help of AutoUpgrade.

Starting point

We start with the Oracle RAC orcl1 database, which is fully operational. We’ve also prepared the orcl3 container to serve as our destination after the upgrade.

We will reuse the existing datafiles, and, to add some complexity, we have TDE (Transparent Data Encryption) enabled.

sourcetarget
db_nameorclorcl
db_unique_nameorcl1orcl2
instance_nameorcl1_1, orcl1_2orcl3_1, orcl3_2
servicesorcl_rw, orcl_ro
version19.3123.26.2
TDE keystore passwordRigyoTasEnuhyu5#TarojoxobOv#n4Wo

Getting ready

The first step is to create the AutoUpgrade configuration file. To make it easy and hassle-free, we will rely on the AutoUpgrade Composer tool, paying special attention to these selections:
Then we record the results in the upg.cfg file.
# Created by AutoUpgrade Composer
# Upgrade, UpgType: noncdb2cdb, FileNameConvert: nocopy

global.global_log_dir=/home/oracle/autoupgrade/log
global.keystore=/home/oracle/autoupgrade/keystore

upg1.sid=orcl1_1
upg1.log_dir=/home/oracle/autoupgrade/log/orcl1_Upgrade
upg1.source_home=/u01/app/oracle/19.0.0/db_1
upg1.target_home=/u01/app/oracle/23.0.0/db_1
upg1.target_cdb=orcl3_1
upg1.target_pdb_name=orcl

Since the database uses TDE, we should start by registering the keystore passwords in the AutoUpgrade wallet, first for the orcl1 database (instance orcl1_1) and then for the orcl3 database (instance orcl3_1).

If your database does not use TDE, you can skip this step and go directly to the next one.

java -jar autoupgrade.jar \
-config upg.cfg \
-load_password

Processing config file ...

Starting AutoUpgrade Password Loader - Type help for available options
Creating new AutoUpgrade keystore - Password required
Enter password: *************
Enter password again: *************
AutoUpgrade keystore was successfully created

TDE> save
Convert the AutoUpgrade keystore to auto-login [YES|NO] ? YES
TDE>

TDE> add orcl1_1
Enter your secret/Password: *************
Re-enter your secret/Password: *************

TDE> add orcl3_1
Enter your secret/Password: *************
Re-enter your secret/Password: *************
TDE> save
TDE> exit

AutoUpgrade Password Loader finished - Exiting AutoUpgrade

First things first: validate

Since we are ready for the upgrade, we ask AutoUpgrade to verify our configuration and ensure everything is set up correctly.

java -jar autoupgrade.jar \
-config upg.cfg \
-mode analyze

AutoUpgrade 26.3.260401 launched with default internal options
Processing config file ...
Loading AutoUpgrade keystore
AutoUpgrade keystore is loaded
+--------------------------------+
| Starting AutoUpgrade execution |
+--------------------------------+
1 Non-CDB(s) will be analyzed
Type 'help' to list console commands
upg> Job 101 completed
------------------- Final Summary --------------------
Number of databases            [ 1 ]

Jobs finished                  [1]
Jobs failed                    [0]

Please check the summary report at:
/home/oracle/autoupgrade/log/cfgtoollogs/upgrade/auto/status/status.html
/home/oracle/autoupgrade/log/cfgtoollogs/upgrade/auto/status/status.log

Once we’ve finished the analysis, we take a moment to check the status.log file to ensure everything went smoothly and no errors popped up.

==========================================
          Autoupgrade Summary Report
==========================================
[Date]           Fri Jun 26 18:34:15 PET 2026
[Number of Jobs] 1
==========================================
[Job ID] 101
==========================================
[DB Name]                orcl1
[Version Before Upgrade] 19.31.0.0.0
[Version After Upgrade]  23.26.2.0.0
------------------------------------------
[Stage Name]    PRECHECKS
[Status]        SUCCESS
[Start Time]    2026-06-26 18:33:52
[Duration]      0:00:22
[Log Directory] /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl11/101/prechecks
[Detail]        /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl11/101/prechecks/orcl1_preupgrade.log
                Check passed and no manual intervention needed
------------------------------------------

It's upgrade time!

The key moment has arrived: we’re now ready to run AutoUpgrade with -mode deploy. Let’s sit back and patiently wait for it to complete.

java -jar autoupgrade.jar \
-config upg.cfg \
-mode deploy

AutoUpgrade 26.3.260401 launched with default internal options
Processing config file ...
Loading AutoUpgrade keystore
AutoUpgrade keystore is loaded
+--------------------------------+
| Starting AutoUpgrade execution |
+--------------------------------+
upg>
The initial action taken is to shut down the orcl1 database.

Next, the database is upgraded and migrated from non-CDB to CDB.

After a few minutes, the upgrade has been successfully completed. Now, we can take a moment to verify everything by reviewing the status.log file, then checking orcl1_postupgrade.log to see what the next steps are.

.
.
.
+--------------------------------+
| Starting AutoUpgrade execution |
+--------------------------------+
upg> Job 102 completed
------------------- Final Summary --------------------
Number of databases            [ 1 ]

Jobs finished                  [1]
Jobs failed                    [0]
Jobs restored                  [0]
Jobs pending                   [0]

The following PDB(s) were created with standbys=none option. Refer to the postcheck result orcl1_postupgrade.log for more details on manual actions needed.
ORCL1_1

Please check the summary report at:
/home/oracle/autoupgrade/log/cfgtoollogs/upgrade/auto/status/status.html
/home/oracle/autoupgrade/log/cfgtoollogs/upgrade/auto/status/status.log
status.log
==========================================
          Autoupgrade Summary Report
==========================================
[Date]           Fri Jun 26 19:01:01 PET 2026
[Number of Jobs] 1
==========================================
[Job ID] 102
==========================================
[DB Name]                orcl1
[Version Before Upgrade] 19.31.0.0.0
[Version After Upgrade]  23.26.2.0.0
------------------------------------------
[Stage Name]    GRP
[Status]        SUCCESS
[Start Time]    2026-06-26 18:37:00
[Duration]      0:00:06
[Detail]        Please drop the following GRPs after Autoupgrade completes:
                 AUTOUPGRADE_9212_ORCL11931000
------------------------------------------
[Stage Name]    PREUPGRADE
[Status]        SUCCESS
[Start Time]    2026-06-26 18:37:07
[Duration]      0:00:00
[Log Directory] /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/preupgrade
------------------------------------------
[Stage Name]    PRECHECKS
[Status]        SUCCESS
[Start Time]    2026-06-26 18:37:07
[Duration]      0:00:23
[Log Directory] /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/prechecks
[Detail]        /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/prechecks/orcl1_preupgrade.log
                Check passed and no manual intervention needed
------------------------------------------
[Stage Name]    PREFIXUPS
[Status]        SUCCESS
[Start Time]    2026-06-26 18:37:31
[Duration]      0:00:16
[Log Directory] /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/prefixups
[Detail]        /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/prefixups/prefixups.html
------------------------------------------
[Stage Name]    DRAIN
[Status]        SUCCESS
[Start Time]    2026-06-26 18:37:47
[Duration]      0:04:08
[Log Directory] /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/drain
------------------------------------------
[Stage Name]    DBUPGRADE
[Status]        SUCCESS
[Start Time]    2026-06-26 18:41:56
[Duration]      0:13:02
[Log Directory] /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/dbupgrade
------------------------------------------
[Stage Name]    NONCDBTOPDB
[Status]        SUCCESS
[Start Time]    2026-06-26 18:59:32
[Duration]      0:00:02
[Log Directory] /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/noncdbtopdb
------------------------------------------
[Stage Name]    POSTCHECKS
[Status]        SUCCESS
[Start Time]    2026-06-26 18:59:34
[Duration]      0:00:01
[Log Directory] /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/postchecks
[Detail]        /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/postchecks/orcl1_postupgrade.log
                Check passed and no manual intervention needed
                The following PDB(s) were created with standbys=none option. Refer to the postcheck result /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/postchecks/orcl1_postupgrade.log for more details on manual actions needed.
                 ORCL11
------------------------------------------
[Stage Name]    POSTFIXUPS
[Status]        SUCCESS
[Start Time]    2026-06-26 18:59:35
[Duration]      0:01:09
[Log Directory] /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/postfixups
[Detail]        /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/postfixups/postfixups.html
------------------------------------------
[Stage Name]    POSTUPGRADE
[Status]        SUCCESS
[Start Time]    2026-06-26 19:00:45
[Duration]      0:00:15
[Log Directory] /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/postupgrade
------------------------------------------
[Stage Name]    SYSUPDATES
[Status]        SUCCESS
[Start Time]    2026-06-26 19:01:00
[Duration]      0:00:00
[Log Directory] /home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/sysupdates
------------------------------------------
Summary:/home/oracle/autoupgrade/log/orcl11_Upgrade/orcl1_1/102/dbupgrade/upg_summary.log
[dbname]          [orcl1]
==========================================
[container]          [ORCL]
==========================================
[checkname]          TIMESTAMP_MISMATCH
[stage]              POSTCHECKS
[fixup_available]    YES
[runfix]             YES
[severity]           WARNING
[action]             Recompile the objects with timestamp mismatch. Refer to MOS note 781959.1 for more details.
[broken rule]        There are objects whose timestamp are mismatched with its parent objects.
[rule]               Timestamp of dependent objects must coincide with the timestamp of parent objects.
----------------------------------------------------

[checkname]          PDB_CREATED_STANDBYS_NONE
[stage]              POSTCHECKS
[fixup_available]    NO
[runfix]             N/A
[severity]           WARNING
[action]             Manual steps need to be performed after upgrade to copy the files to the standby database and enable recovery of the PDB from PRIMARY to STANDBY. Refer to MOS document Doc ID 1916648.1 for detailed steps.
[broken rule]        The following PDB(s) [ORCL1_11] were created with standbys=none option.
[rule]               On a Data Guard configuration, the CREATE PLUGGABLE DATABASE statement needs to be executed with clause STANDBYS=NONE to avoid impacting redo apply. That clause allows for deferral of file instantiation on the standby and the physical standby database to continue to protect existing pluggable databases. The clause allows the general structure of the PDB to be created on all physical standbys but all files belonging to the PDB are marked as OFFLINE/RECOVER at the standby.
----------------------------------------------------

[checkname]          POST_DICTIONARY
[stage]              POSTCHECKS
[fixup_available]    YES
[runfix]             YES
[severity]           RECOMMEND
[action]             Gather dictionary statistics after the upgrade using the command:    EXECUTE DBMS_STATS.GATHER_DICTIONARY_STATS;
[broken rule]        Oracle recommends gathering dictionary statistics after upgrade.
[rule]               Dictionary statistics provide essential information to the Oracle optimizer to help it find efficient SQL execution plans. After a database upgrade, statistics need to be re-gathered as there can now be tables that have significantly changed during the upgrade or new tables that do not have statistics gathered yet.
----------------------------------------------------

[checkname]          POST_FIXED_OBJECTS
[stage]              POSTCHECKS
[fixup_available]    NO
[runfix]             N/A
[severity]           RECOMMEND
[action]             Gather statistics on fixed objects after the upgrade and when there is a representative workload on the system using the command:    EXECUTE DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
[broken rule]        Oracle recommends gathering fixed object statistics after upgrade. This recommendation is given for all preupgrade runs.
[rule]               Fixed object statistics provide essential information to the Oracle optimizer to help it find efficient SQL execution plans. Those statistics are specific to the Oracle Database release that generates them, and can be stale upon database upgrade.  For information on managing optimizer statistics, refer to the 19.0.0.0 Oracle Database Upgrade Guide.
----------------------------------------------------

Wrapping up

By reviewing orcl1_postupgrade.log, we’re reminded of the importance of updating the dictionary and fixed objects statistics. To do this, we should proceed by executing:

execute DBMS_STATS.GATHER_DICTIONARY_STATS;
execute DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;

We must check for any remaining issues after the database plugin. Once everything is resolved, we can clean up the violations table.

SELECT message, type, status
  FROM pdb_plug_in_violations 
 WHERE name = 'ORCL'
 ORDER BY time DESC;

exec DBMS_PDB.CLEAR_PLUGIN_VIOLATIONS;

Although the orcl1 database services are registered in the new PDB orcl, clusterware-level services have not been created and must be registered manually using srvctl.

column name format a20
column network_name format a20

SELECT con_id, name, network_name 
  FROM v$services
 ORDER by con_id, name;

    CON_ID NAME                 NETWORK_NAME
---------- -------------------- --------------------
         1 SYS$BACKGROUND
         1 SYS$USERS
         1 orcl3                orcl3
         1 orcl3XDB             orcl3XDB
         3 orcl                 orcl
         3 orcl1                orcl1
         3 orcl1XDB             orcl1XDB
         3 orcl_ro              orcl_ro
         3 orcl_rw              orcl_rw
$ srvctl config service -db orcl3

$ srvctl add service -db orcl3 -service orcl_rw -pdb orcl -role primary -preferred orcl3_1,orcl3_2
$ srvctl add service -db orcl3 -service orcl_ro -pdb orcl -role physical_standby -preferred orcl3_1,orcl3_2

$ srvctl start service -db orcl3 -service orcl_rw
$ srvctl start service -db orcl3 -service orcl_ro
$ srvctl stop service -db orcl3 -service orcl_ro

$ srvctl status service -db orcl3
Service orcl_ro is not running.
Service orcl_rw is running on instances orcl3_1,orcl3_2

Final thoughts

If you’ve taken the trouble to review the official documentation, you may have noticed that there are many manual tasks to perform in our scenario, starting with the conversion to multitenant, followed by the migration of the TDE keys, and the upgrade to 26ai itself — quite intimidating, isn’t it?

But you’ve already seen how easy it is with AutoUpgrade: just create a configuration file, run it a couple of times, and you’re done. Everything is automated and error-free. So, no excuses: run your tests and set a date for your upgrade to Oracle 26ai!

Recent Posts

www.vecteezy.com/free-vector/girl
Here's my pick of the five best articles about Oracle from June 2026.
www.magnific.com/free-vector/man-using-laptop-computer_136881009.htm
Here's my pick of the five best articles about Oracle from May 2026.
www.magnific.com/free-vector/young-man-working-laptop-near-window_149442655.htm
Here's my pick of the five best articles about Oracle from April 2026.
www.vecteezy.com/free-vector/person-looking-at-computer
This is my list of the top five Oracle-related stories from March 2026.
Patching the database
Discover how to perform rolling patching to an Oracle RAC database using AutoUpgrade and a Gold Image.
https://www.vecteezy.com/free-vector/art
This is my list of the top five Oracle-related stories from February 2026.

Need Help?

Fill in these details and I will be in touch as soon as possible.