When you prepare for patching or upgrading Oracle Database 19c, you must also prepare an Oracle Home. Installing the Oracle Home is easy, but there is more to it.
I always use out-of-place installation. I install a new, fresh Oracle Home. I will move the databases into that Oracle Home as I upgrade or patch.
The alternative, in-place installation, leads to more downtime, is more error-prone, and makes fallback more complicated. In addition, in-place installation will gradually slow down patching; as Mike Dietrich describes in Binary patching is slow because of the inventory.
Download and Prepare Oracle Home
First, I download the base release from Oracle Software Delivery Cloud, aka e-delivery.
Find REL: Oracle Database 188.8.131.52.0 – Long Term Release, the right platform, and download.
Extract the zip file into a new Oracle Home location:
export NEW_ORACLE_HOME=<path> mkdir -p $NEW_ORACLE_HOME cd $NEW_ORACLE_HOME unzip -oq /tmp/LINUX.X64_193000_db_home.zip rm /tmp/LINUX.X64_193000_db_home.zip
Don’t run the installer yet.
Clone Existing Oracle Home
OPatch is needed later on to apply patches to the new Oracle Home. Get the latest version and install it into the new Oracle Home:
rm -rf $NEW_ORACLE_HOME/OPatch cd $NEW_ORACLE_HOME unzip -oq /tmp/<opatch_zip_file> rm /tmp/<opatch_zip_file>
Now, I will determine which patches to apply to the Oracle Home.
- Start by getting the latest Release Update. I really mean the latest. I have helped too many customers with issues, only to find out the issue is already solved in a later Release Update. If your database has JAVAVM installed, then get the combo patch.
- Review the list of important one-off patches for the specific Release Update. The list contains important fixes that haven’t made into a Release Update yet. I don’t need to get all of them, but based on my knowledge of my database, I can cherrypick those that could be relevant.
- If I am using Data Pump, I get the Data Pump bundle patch. Data Pump fixes rarely make it into Release Updates, but they are not RAC-Rolling Installable which is a clear requirement for inclusion in Release Update.
- If my databases use time zone files that are newer than version 32, then I must also apply the matching time zone patch. The default time zone file in Oracle Database 19c is version 32, and the base release contains all previous versions. To check the time zone file version in a database:
SQL> select * from v$timezone_file;
- If I am using GoldenGate, I get the GoldenGate bundle patch.
- If my database uses OJVM (see appendix), I get the OJVM patch that matches the Release Update I am using. I can also get the OJVM patch as a combo patch together with the Release Update.
Now that I have downloaded a number of zip files, I go ahead and unzip the files into separate directories. In the below example, I am using 19.16 Release Update, Data Pump bundle patch and a time zone patch:
#Release Update 19.16.0 mkdir -p $NEW_ORACLE_HOME/patch/p34133642 cd $NEW_ORACLE_HOME/patch/p34133642 unzip -oq /tmp/p34133642_190000_Linux-x86-64.zip rm /tmp/p34133642_190000_Linux-x86-64.zip #Data Pump bundle patch mkdir -p $NEW_ORACLE_HOME/patch/p34294932 cd $NEW_ORACLE_HOME/patch/p34294932 unzip -oq /tmp/p34294932_1916000DBRU_Generic rm /tmp/p34294932_1916000DBRU_Generic #Time zone patch version 37 mkdir -p $NEW_ORACLE_HOME/patch/p33613829 cd $NEW_ORACLE_HOME/patch/p33613829 unzip -oq /tmp/DSTV37_p33613829_190000_Linux-x86-64.zip rm /tmp/DSTV37_p33613829_190000_Linux-x86-64.zip
I do a silent installation using a response file. Notice how I am applying the patches during the installation using
export ORACLE_BASE=<path_to_oracle_base> export ORACLE_HOME=<path_to_oracle_home> #Path to inventory is most likely /u01/app/oraInventory export ORA_INVENTORY=<path_to_inventory> cd $ORACLE_HOME ./runInstaller -ignorePrereqFailure -waitforcompletion -silent \ -responseFile $ORACLE_HOME/install/response/db_install.rsp \ -applyRU patch/p34133642/34133642 \ -applyOneOffs patch/p34294932/34294932,patch/p33613829/33613829 \ oracle.install.option=INSTALL_DB_SWONLY \ UNIX_GROUP_NAME=oinstall \ INVENTORY_LOCATION=$ORA_INVENTORY \ SELECTED_LANGUAGES=en,en_GB \ ORACLE_HOME=$ORACLE_HOME \ ORACLE_BASE=$ORACLE_BASE \ oracle.install.db.InstallEdition=EE \ oracle.install.db.OSDBA_GROUP=dba \ oracle.install.db.OSBACKUPDBA_GROUP=dba \ oracle.install.db.OSDGDBA_GROUP=dba \ oracle.install.db.OSKMDBA_GROUP=dba \ oracle.install.db.OSRACDBA_GROUP=dba \ oracle.install.db.isRACOneInstall=false \ oracle.install.db.rac.serverpoolCardinality=0 \ oracle.install.db.config.starterdb.type=GENERAL_PURPOSE \ oracle.install.db.ConfigureAsContainerDB=false \ SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \ DECLINE_SECURITY_UPDATES=true
You can read more about silent installation on oracle-base.com. That’s where I got inspired from. The reponse file db_install.rsp is the default one that comes with the Oracle Home. I don’t change anything in it.
Finally, I execute
root.sh as root:
Download the latest version of AutoUpgrade, and put it into $ORACLE_HOME/rdbms/admin.
That’s it. I can now use the Oracle Home to upgrade or patch my Oracle Database 19c.
As if the list of patches to apply wasn’t long enough. There are even more MOS notes!
Good news is that you don’t have to go through them, as long as you stay on the latest Release Update. If you check the notes, you will see that almost all bugs are already included in a Release Update. That’s a pretty strong argument for always using the latest Release Update.
- Things to Consider to Avoid Prominent Wrong Result Problems on 19C Proactively (Doc ID 2606585.1)
- Things to Consider to Avoid Database Performance Problems on 19c (Doc ID 2773012.1)
- Things to Consider to Avoid SQL Performance Problems on 19c (Doc ID 2773715.1)
- Things to Consider to Avoid SQL Plan Management (SPM) Related Problems on 19c (Doc ID 2774029.1)
If Grid Infrastructure manages my database, I must remember to keep GI and database patch level in sync.
It Looks Complicated
It is a little to cumbersome. We know, and that’s why there are several initiatives to make it easier.
You could also look at Oracle Fleet Patching & Provisioning (FPP). Philippe Fierens is product manager for FPP. You can read his blog posts or reach out to him (he is a nice guy who takes every opportunity to talk about FPP).
If your database is using OJVM, then you must also apply the OJVM patch to your Oracle Home. You can check it using:
select version, status from dba_registry where comp_id=’JAVAVM’
I have seen many databases that had OJVM installed, but it was never used. In such case, you can remove the component from your database. Then you no longer need to apply the OJVM patch to your Oracle Home. Plus it has the added benefit that it will make your upgrades faster.