In an Oracle home, you find a Java installation – a full JDK.
cd $ORACLE_HOME
ls -l jdk
Some of the tools related to Oracle AI Database are Java-based, like AutoUpgrade, making it convenient to have.
How do you patch the JDK in your Oracle home?
Updating JDK
When you apply a Release Update to your database, you’re also updating your JDK. Those patches are part of the Release Update.
Here are two Oracle homes with different Release Updates:
cd /u01/app/oracle/product/dbhome_1927
jdk/bin/java -version
java version "1.8.0_441"
Java(TM) SE Runtime Environment (build 1.8.0_441-b07)
[ Java HotSpot(TM) 64-Bit Server VM (build 25.441-b07, mixed mode)](https://docs.oracle.com/en/database/oracle/oracle-database/26/upgrd/patch-parameters-autoupgrade-config-file.html#UPGRD-GUID-A7E6221E-5964-4553-9A63-61B2E4AB1CBD)
cd /u01/app/oracle/product/dbhome_1929
jdk/bin/java -version
java version "1.8.0_461"
Java(TM) SE Runtime Environment (build 1.8.0_461-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.461-b11, mixed mode)
Notice how the JDK is newer in the later Release Update.
So, all’s good, right?
The Latest Ones
The Java team builds its patches around the same time as the database team builds the Release Update.
This means that the JDK patches you find in a Release Update are from the previous quarter. There’s simply not enough time to include the very latest JDK patches in the Release Update. We also need time for regression testing and other tasks.
So, the very latest JDK patches are made available as a one-off patch.
You can instruct AutoUpgrade to get the latest available JDK patches using the jdk keyword in your patch configuration.
patch1.patch=RU,OPATCH,JDK
Here’s an example of two 19.29 Oracle homes – one without and one with the JDK patch:
cd /u01/app/oracle/product/dbhome_1929
jdk/bin/java -version
java version "1.8.0_461"
Java(TM) SE Runtime Environment (build 1.8.0_461-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.461-b11, mixed mode)
cd /u01/app/oracle/product/dbhome_1929jdk
jdk/bin/java -version
java version "1.8.0_471"
Java(TM) SE Runtime Environment (build 1.8.0_471-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.471-b11, mixed mode)
Notice how the version changes from 461 to 471.
Daniel’s Recommendation
Now that it has become so easy to update the JDK, I recommend doing it.
Security is paramount!
I see minimal risk in doing that.
The Java installation in Oracle Database 19c is version 8 that is very mature.
In Oracle AI Database 26ai, it is Java 11 that is also very mature.
Those two Java releases are in a part of their lifecycle where a few things are updated.
I recall no major issues caused by a JDK patch.
But what do you think?
Are you already updating the JDK, or do you plan to do so in the future?
Have you experienced issues with JDK in your Oracle home?
Let me know in the comments below.
Now that I’ve finished with Oracle AI World and the EMEA Community Tour is coming to a close, I have some free time on my hands. What better way to spend that time than to create webinars?
Webinar 26: Best Practices for Upgrading to Oracle AI Database 26ai
Webinar 27: Database Patching for DBAs – Patch smarter, not harder
Webinar 28: Patch smarter, not harder – MS Windows Special Edition
When and How
We’ll be airing the first webinar in December, and the other two will follow early next year.
Webinar
Date
Best Practices for Upgrading to Oracle AI Database 26ai
December 11 2025, 14:00 CET
Database Patching for DBAs – Patch smarter, not harder
February 12 2026, 14:00 CET
Patch smarter, not harder – MS Windows Special Edition
March 12 2026, 14:00 CET
All our webinars are free. Just sign up and we’ll send you the details.
Why
First of all, these webinars are all tech, no marketing!
You can learn how to tackle your next upgrade project to Oracle AI Database 26ai. Although it’s not yet available for all platforms, there are still important preparations that you should start today.
Furthermore, we’ll share how other customers have upgraded their mission-critical systems to the latest release and whether there are any secret underscores (spoiler: there is…).
Over the last year, we’ve made significant enhancements to AutoUpgrade that make it so much easier to patch your databases. After watching this webinar, you’ll never download patches from My Oracle Support again.
Oracle on Windows is slightly different – but don’t worry, AutoUpgrade got you covered. Use the latest enhancements to streamline your operations of Oracle AI Database on Windows.
See You
If you can’t wait, remember that you can watch all our previous webinars on demand.
If you’re a frequent visitor to my blog, you’ll know I’m a big AutoUpgrade fanboy – especially the download mode, which can save you hours of downloading patches on My Oracle Support.
Recently, I was preaching to another customer, and when they finally gave in, here’s what happened:
We gave it a shot, but we keep running into errors when we try the download mode.
So, let’s see how we can solve the most common problems.
My Oracle Support
You must have an Oracle SSO account.
That account must be linked to a Customer Support Identifier (CSI) that has an active support agreement.
In that CSI, you must have the privilege to download patches. The MOS administrator in your organization can help you with that.
In User Details, select the appropriate Support Identifier, set the Patches drop-down to Download.
If AutoUpgrade tells you that your username or password is incorrect:
*Connection Failed - You entered an incorrect user name or password.*
You should ensure that you’re using the latest version of AutoUpgrade. We recently fixed a bug for passwords with certain special characters.
Network Connectivity
AutoUpgrade must connect to the following servers:
Those servers are part of a Content Delivery Network (CDN), so expect changing IP addresses. Base your firewall rules on DNS names rather than IP addresses.
InsaneDBA, aka Osman, wrote a good blog post on this topic – especially for those of you on Windows.
*SSL peer shut down incorrectly*
Check firewall settings and security groups to ensure they permit SSL traffic on the required ports.
Windows
If AutoUpgrade requires that you use an elevated command prompt (the run as administrator thing) when you use download mode, you should update to the latest version of AutoUpgrade. It no longer requires this.
In the multitenant architecture in Oracle AI Database, the container database is essential. If you create it the right way, you can avoid some difficulties later on.
Here’s my recommendation for creating container databases.
3xC
The three most important things all start with “C”. Makes it easier to remember.
Character Set
The first one is straightforward: stick with the default, AL32UTF8.
If the root container is AL32UTF8, you can plug in PDBs with any character set. You can have a mix of the classic US7ASCII, old-school European without the Euro sign in WE8ISO8859P1, Japanese JA16SJIS, and original Unicode UTF8, and whatever.
But as soon as you set the root character set to anything but AL32UTF8, all PDBs are bound to the same character set.
Remain flexible and use AL32UTF8.
Components
The number of components has a direct influence on the time it takes to upgrade and patch a database.
Any component used by a PDB must also be installed in the root container. So, install as many components as you need in root. No more than that (selectively tick checkboxes in the blue box).
Also, from a least privilege kind-of-perspective don’t install more than you need.
When you decide on a set of components to install, do that in root only. Ensure that new PDBs have none of the components installed (untick all checkboxes in the red box). This gives you the leanest PDBs. If a PDB requires a component, it’s easy to install afterward.
Compatible
The most important thing is that you have a uniform compatible setting in all your CDBs. This gives you the most flexibility.
When you plug in a PDB, it must have the same compatible setting as the root container.
If the PDB has a lower compatible setting, it will automatically and silently raise the setting to that of the root container.
If the PDB has a higher compatible setting, you won’t be able to plug it in.
Important Parameters
Once you have created a CDB, I recommend setting these parameters.
The database now throws an error if you try to create a fourth PDB.
_exclude_seed_cdb_view
By default, the CDB views do not show information about PDB$SEED. I’m not too fond of this behavior. I want to know if there is a problem with it.
alter system set "_exclude_seed_cdb_view"=false scope=both;
Records from PDB$SEED now show up in the CDB views with CON_ID=2.
Create The CDB Using DBCA
You need to use the advanced configuration in Database Configuration Assistance (DBCA) to create a CDB that matches the above recommendations.
Select Create a database.
Select Advanced configuration.
Create a Custom Database.
On the following few pages, you can make the changes you like until you reach the Database Options page.
When you reach the Database Options page, select the components you need in the root container (blue box). In the Include in PDBs list, select only the component you need in all your PDBs. Otherwise, leave them out so you get a lean PDB. You can easily add components later on.
On the Configuration Options page, on the Character sets tab, ensure that you select Use Unicode (AL32UTF8).
On the Creation Option page, click on All initialization Parameters, and select the compatible setting you use. I recommend using the default.
On the Summary page, you should Save Response File so you can create additional CDBs in silent mode.
Create Manually
After creating the first database using DBCA, you can create another using the response file and DBCA in silent mode.
Make the required changes to the response file.
Update the name of the database.
Verify the list of parameters.
Other settings.
For reference, in the appendix, you can find a sample response file that we use in our hands-on labs.
If you need to create the database with a non-default timezone file version, set the following parameter:
Back from Oracle AI World in Las Vegas – the conference formerly known as CloudWorld formerly known as OpenWorld. Badge now joins the others on my wall.
Oracle AI World is special, especially for someone like me who usually works from home. In a few days, I reunited with colleagues, customers, and friends—a very intense social event for someone used to meeting people on Zoom.
It’s also the time of the year when I get to spend time with my team.
Long days left me with sore feet from extended standing and walking.
The motto of the conference: AI is changing everything! I only had time to play with AI generated pictures.
Nine-hour time difference usually causes me jetlag, but not this time. I used the Timeshifter app, drank lots of water with electrolytes (no caffeine), got sunshine and darkness at the right times, and took Melatonin (this is not a medical endorsement, always check with your doctor). I recovered quickly. If you suffer from jetlag too, give it a shot.
Fruit and a protein bar in my bag served as emergency fuel when meals were delayed—a tip for future conferences.
First Air Canada flight—a pleasure. Flew a Boeing Dreamliner, my second favorite after the Airbus A350. As an aviation geek, I love watching planes. What’s your favorite aircraft?
While making a layover in Toronto, I saw Canada’s vast autumn forests from above on approach—a magnificent sight. I’d love to visit Canada in autumn. Any recommendations for must-see sights?
Saw a remake of The Wizard of Oz at The Sphere. What a wild ride—unbelievable. If you visit Las Vegas, catch a show there. That’s a true big screen.
So many people were doing selfies, that we had to make a selfie-with-a-selfie.
Job Done
That’s it! Celebrated an amazing conference with the team and said our goodbyes.
Moving forward, stay tuned for news on the upcoming Oracle AI World Tour 2026—coming soon to a city near you.
Next year’s conference returns to The Venetian in late October. Hope to see you there! If you have a story to share, reach out—perhaps you can present it with us.
THANKS to everyone that took part in making Oracle AI World a big success!
There are many influencers who are not affiliated with Oracle. They are certainly worth following as well. However, the assignment was to identify Oracle employees only.
Thanks to all of you out there who share knowledge with the Oracle community.
When talking about upgrades, Oracle Database has a great fallback mechanism; a downgrade. Even after going live on Oracle Database 23ai, you can get back to Oracle Database 19c or 21c – with no data loss.
How to Downgrade From Oracle Database 23ai
My PDB, PDB1, has already been upgraded to Oracle Database 23ai. Now, I want to downgrade to Oracle Database 19c. In the downgrade process, I will unplug from CDB23 and into CDB19.
I open the PDB in downgrade mode:
alter pluggable database PDB1 close immediate;
alter pluggable database PDB1 open downgrade;
Downgrade mode is a special mode – similar to upgrade mode. It enables exclusive access to the database and disables a lot of features.
I set the environment to CDB23 and start the downgrade process:
cd $ORACLE_HOME/bin
./dbdowngrade -c 'PDB1'
The -c command line parameter starts a downgrade of a specific PDB; not the entire CDB.
After the downgrade, I close and unplug from CDB23:
alter pluggable database PDB1 close;
alter pluggable database PDB1 unplug into '/home/oracle/scripts/pdb1.xml';
Now, I connect to CDB19 running on Oracle Database 19c. I plug in and open the PDB in upgrade mode:
create pluggable database PDB1 using '/home/oracle/scripts/pdb1.xml';
alter pluggable database PDB1 open upgrade;
I switch to PDB1 and complete the downgrade by running the catrelod.sql script:
alter session set container=PDB1;
@$ORACLE_HOME/rdbms/admin/catrelod.sql
Then, I recompile all invalid objects:
@$ORACLE_HOME/rdbms/admin/utlrp.sql
A restart of the PDB. I open in normal mode:
alter pluggable database PDB1 close;
alter pluggable database PDB1 open;
I gather new dictionary statistics:
exec dbms_stats.gather_dictionary_stats;
After a while, when the database is warmed up, I also gather fixed objects statistics.
I verify that all components are VALID or OPTION OFF:
select comp_id, version, status from dba_registry;
I run Datapatch to ensure all SQL patches are properly applied:
$ORACLE_HOME/OPatch/datapatch
That’s it!
Worth Knowing About Downgrades
The downgrade is a two-step process.
The first part happens while the database is running in the new Oracle Home. Startup in a special downgrade mode and execute catdwgrd.sql to start the downgrade.
Next, restart the database in the old Oracle Home and start in upgrade mode. catrelod.sql will re-install any missing objects in the database and finish the downgrade.
If the timezone file was upgraded, the same timezone file must be present in the old Oracle Home.
Before you start the downgrade, there’s no need to roll off any patches with Datapatch. The downgrade mechanism takes care of that.
The data dictionary in a downgraded database is not identical to the pre-upgraded database. The data dictionary will be different, but compatible. Here are some examples:
Generally, dropping objects is avoided.
New tables are most likely not dropped but truncated.
New indexes are most likely kept.
Although you can downgrade a database from Oracle Database 23ai to 19c, you can’t undo the multitenant migration. To get back to a non-CDB you must use other means like Data Pump, transportable tablespaces, or GoldenGate.
Want to Try?
Hopefully, you never need to downgrade a PDB. But I bet you can resist the urge to try it. Right? RIGHT?
My ops team wants to use the Oracle Database 23ai preinstallation RPM for all our new servers. For now, the servers will host Oracle Database 19c only. In the future, we will use Oracle Database 23ai on those servers as well.
The preinstallation RPM contains instructions on which packages to install and which system settings to set. According to the Oracle Database 19c Installation Guide for Linux, this is how you run it:
dnf install oracle-database-preinstall-19c
Let’s find out whether you can use the 23ai preinstallation RPM for 19c.
Inspecting the Package
I use an Oracle Linux 8 test system. First, I install both packages:
The file oracle-database-preinstall-19c.param contains the settings, groups, and users. In the 23ai RPM, there is a similar file, oracle-database-preinstall-23ai.param. I can compare the two files to see any differences:
#Remove comments before comparing
sed '/^\(#\|kernelcomment\|usercomment\)/d' /etc/sysconfig/oracle-database-preinstall-19c/oracle-database-preinstall-19c.param > /tmp/19c.params
sed '/^\(#\|kernelcomment\|usercomment\)/d' /etc/sysconfig/oracle-database-preinstall-23ai/oracle-database-preinstall-23ai.param > /tmp/23ai.params
diff /tmp/19c.params /tmp/23ai.params
Then, I can analyze the differences. < is the 19c setting, > is the 23ai setting.
NUMA off for all architectures. Not a big deal, as this is Oracle Linux and Oracle Database runs on 64-bit architecture only.
But there is a change in the setting for transparent hugepages. Knowing how much havoc transparent hugepages have caused, this is an important change. I’ll get back to that.
63a63,64
> kernel:*:*:*:kernel.panic:10
Adding a kernel panic setting. Shouldn’t cause any concern.
Transparent Hugepage
The setting for transparent hugepages changes from never to madvise. In this setting, the kernel only assigns huge pages to application processes that explicitly request huge pages through the madvise() system call (ref. Oracle Linux 8 – Configuring Huge Pages).
For optimal performance, Oracle recommends that you set Transparent HugePages to madvise on all Oracle Database servers UEK7 and later kernels and not disable Transparent HugePages as was recommended in prior releases.
Let me check my kernel version:
uname -r
5.15.0-307.178.5.el8uek.x86_64
el8uek means my kernel is UEK8, so I can use the new setting on this system.
But I will use this server for Oracle Database 19c and 23ai, so can I use the new madvise setting?
Transparent huge page memory is enabled by default on Oracle Linux and Exadata. The ‘madvise’ parameter used in the kernel command enables transparent huge pages and assigns huge pages to memory regions explicitly requested by applications using the madvise system call. In the case that Oracle Database 19c and 23ai are running on the same server, Oracle recommends setting transparent huge pages to ‘madvise’.
So, it should be safe to run with the new setting for Oracle Database 19c. If you are concerned, you can revert to never until you install Oracle Database 23ai.
Packages
I can find the dependencies of the two preinstallation RPMs:
There are many differences because the 23ai RPM now lists minimum versions for many packages. Assuming that you automatically install the latest version of the packages, I will disregard those differences.
This brings me to this list. These dependencies are not part of the 23ai RPM: