In today’s post I want to show how to create an Oracle database home gold image (GI). I will cover the steps I usually follow, the checks I perform and the options to create the GI and finally automate it.
I’ll start by stating that I’m using an old database Oracle home for this example. This home is from a DB running 19c RU 17. The idea is to patch it to RU32 (July 2026) and apply the September MRP (September CSPU).
Download the latest OPatch and the July 2026 RU patches. Stage them and upgrade OPatch. At the time of this post OPatch version 12.2.0.1.53 is the latest available for 19c. Let’s verify if it can work with July 2026 RU.
$ $ORACLE_HOME/OPatch/opatch prereq CheckMinimumOPatchVersion -ph /home/oracle/39472050/
Oracle Interim Patch Installer version 12.2.0.1.53
Copyright (c) 2026, Oracle Corporation. All rights reserved.
PREREQ session
Oracle Home : /u01/db/19c/sales
Central Inventory : /u01/app/inventory
from : /u01/db/19c/sales/oraInst.loc
OPatch version : 12.2.0.1.53
OUI version : 12.2.0.7.0
Log file location : /u01/db/19c/sales/cfgtoollogs/opatch/opatch2026-10-09_18-21-36PM_1.log
Invoking prereq "checkminimumopatchversion"
Prereq "checkMinimumOPatchVersion" passed.
OPatch succeeded.
Let’s now check for conflicts.
$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /home/oracle/39472050/
Oracle Interim Patch Installer version 12.2.0.1.53
Copyright (c) 2026, Oracle Corporation. All rights reserved.
PREREQ session
Oracle Home : /u01/db/19c/sales
Central Inventory : /u01/app/inventory
from : /u01/db/19c/sales/oraInst.loc
OPatch version : 12.2.0.1.53
OUI version : 12.2.0.7.0
Log file location : /u01/db/19c/sales/cfgtoollogs/opatch/opatch2026-10-09_18-22-14PM_1.log
Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.
At this point I’m ready to apply July 2026 RU to this OH. I’m going to shutdown all instances running, listeners and then proceed to apply the RU.
$ORACLE_HOME/OPatch/opatch apply
Oracle Interim Patch Installer version 12.2.0.1.53
Copyright (c) 2026, Oracle Corporation. All rights reserved.
Oracle Home : /u01/db/19c/sales
Central Inventory : /u01/app/inventory
from : /u01/db/19c/sales/oraInst.loc
OPatch version : 12.2.0.1.53
OUI version : 12.2.0.7.0
Log file location : /u01/db/19c/sales/cfgtoollogs/opatch/opatch2026-10-09_18-25-07PM_1.log
Verifying environment and performing prerequisite checks...
-----------------------------------------------------------------------------
Start OOP by Prereq process.
Launch OOP...
Oracle Interim Patch Installer version 12.2.0.1.53
Copyright (c) 2026, Oracle Corporation. All rights reserved.
Oracle Home : /u01/db/19c/sales
Central Inventory : /u01/app/inventory
from : /u01/db/19c/sales/oraInst.loc
OPatch version : 12.2.0.1.53
OUI version : 12.2.0.7.0
Log file location : /u01/db/19c/sales/cfgtoollogs/opatch/opatch2026-10-09_18-26-04PM_1.log
Verifying environment and performing prerequisite checks...
OPatch continues with these patches: 39472050
Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.
Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/u01/db/19c/sales')
Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
Applying interim patch '39472050' to OH '/u01/db/19c/sales'
ApplySession: Optional component(s) [ oracle.network.gsm, 19.0.0.0.0 ] , [ oracle.assistants.asm, 19.0.0.0.0 ] , [ oracle.datamining, 19.0.0.0.0 ] , [ oracle.crypto.rsf, 19.0.0.0.0 ] , [ oracle.oraolap.mgmt, 19.0.0.0.0 ] , [ oracle.pg4appc, 19.0.0.0.0 ] , [ oracle.precomp.companion, 19.0.0.0.0 ] , [ oracle.rdbms.ic, 19.0.0.0.0 ] , [ oracle.java.sqlj.sqljruntime, 19.0.0.0.0 ] , [ oracle.rdbms.tg4db2, 19.0.0.0.0 ] , [ oracle.sdo.companion, 19.0.0.0.0 ] , [ oracle.tfa, 19.0.0.0.0 ] , [ oracle.rdbms.tg4ifmx, 19.0.0.0.0 ] , [ oracle.oid.client, 19.0.0.0.0 ] , [ oracle.rdbms.tg4sybs, 19.0.0.0.0 ] , [ oracle.ldap.ztk, 19.0.0.0.0 ] , [ oracle.ons.eons.bwcompat, 19.0.0.0.0 ] , [ oracle.net.cman, 19.0.0.0.0 ] , [ oracle.ons.cclient, 19.0.0.0.0 ] , [ oracle.xdk.companion, 19.0.0.0.0 ] , [ oracle.options.olap, 19.0.0.0.0 ] , [ oracle.rdbms.tg4msql, 19.0.0.0.0 ] , [ oracle.rdbms.tg4tera, 19.0.0.0.0 ] , [ oracle.network.cman, 19.0.0.0.0 ] , [ oracle.options.olap.api, 19.0.0.0.0 ] , [ oracle.jdk, 1.8.0.191.0 ] , [ oracle.jdk, 1.8.0.391.11 ] not present in the Oracle Home or a higher version is found.
Patching component oracle.rdbms.util, 19.0.0.0.0...
Patching component oracle.rdbms.rsf, 19.0.0.0.0...
Patching component oracle.rdbms, 19.0.0.0.0...
Patching component oracle.assistants.acf, 19.0.0.0.0...
Patching component oracle.assistants.deconfig, 19.0.0.0.0...
...
Patching component oracle.jdk, 1.8.0.201.0...
Patch 39472050 successfully applied.
Sub-set patch [34419443] has become inactive due to the application of a super-set patch [39472050].
Sub-set patch [31222103] has become inactive due to the application of a super-set patch [39472050].
Please refer to Doc ID 2161861.1 for any possible further required actions.
Log file location: /u01/db/19c/sales/cfgtoollogs/opatch/opatch2026-10-09_18-26-04PM_1.log
OPatch succeeded.
After this I’m going to verify all the log files and look for any errors or warnings. I’ll then start the DB and the listener if the installation is successful.
Let’s now do a sanity check for datapatch.
$ ./datapatch -sanity_checks
SQL Patching sanity checks version 19.32.0.0.0 on Fri 09 Oct 2026 06:39:50 PM GMT
Copyright (c) 2021, 2026, Oracle. All rights reserved.
Log file for this invocation: /u01/app/19c/cfgtoollogs/sqlpatch/sanity_checks_20261009_183950_24361/sanity_checks_20261009_183950_24361.log
Running checks
JSON report generated in /u01/app/19c/cfgtoollogs/sqlpatch/sanity_checks_20261009_183950_24361/sqlpatch_sanity_checks_summary.json file
Checks completed. Printing report:
Check: Database component status - INFO
There should be no INVALID components prior patching due to risk of potential errors.
Listed components have a non-valid status.
For INVALID components: Run '?/rdbms/admin/utlrp.sql' (per container) to try recompiling invalid objects and restore component status.
For other non-valid status, depending on patch content warnings may be returned.
...
Check: GoldenGate triggers - OK
Check: Logminer DDL triggers - OK
Check: Check sys public grants - OK
Check: Statistics gathering running - OK
Check: Optim dictionary upgrade parameter - OK
Check: Symlinks on oracle home path - OK
Check: Central Inventory - OK
Check: Java Virtual Machine Enable - OK
Check: Oracle Database Vault Enabled - OK
Check: Queryable Inventory database directories - OK
Check: Queryable Inventory locks - OK
Check: Queryable Inventory package - OK
Check: Queryable Inventory external table - OK
Check: Imperva processes - OK
Check: Guardium processes - OK
Check: Locale - OK
Refer to MOS Note 2975965.1 and debug log
/u01/app/19c/cfgtoollogs/sqlpatch/sanity_checks_20261009_183950_24361/sanity_checks_debug_20261009_183950_24361.log
SQL Patching sanity checks completed on Fri 09 Oct 2026 06:40:00 PM GMT
Verify the logs to look for issues or warnings. Execute datapatch if no errors found.
$ ./datapatch
SQL Patching tool version 19.32.0.0.0 Production on Fri Oct 9 18:40:43 2026
Copyright (c) 2012, 2026, Oracle. All rights reserved.
Log file for this invocation: /u01/app/19c/cfgtoollogs/sqlpatch/sqlpatch_25314_2026_10_09_18_40_43/sqlpatch_invocation.log
Connecting to database...OK
Gathering database info...done
Note: Datapatch will only apply or rollback SQL fixes for PDBs
that are in an open state, no patches will be applied to closed PDBs.
Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation
(Doc ID 1585822.1)
Bootstrapping registry and package to current versions...done
Determining current state...done
...
Installing patches...
Patch installation complete. Total patches installed: 7
...
SQL Patching tool complete on Fri Oct 9 19:00:06 2026
Let’s verify logs to look for errors or warnings. At this point we can cleanup our OH. Let’s list any inactive patches and cleanup before continuing with the September MRP.
$ $ORACLE_HOME/OPatch/opatch util listorderedinactivepatches
Oracle Interim Patch Installer version 12.2.0.1.53
Copyright (c) 2026, Oracle Corporation. All rights reserved.
Oracle Home : /u01/db/19c/sales
Central Inventory : /u01/app/inventory
from : /u01/db/19c/sales/oraInst.loc
OPatch version : 12.2.0.1.53
OUI version : 12.2.0.7.0
Log file location : /u01/db/19c/sales/cfgtoollogs/opatch/opatch2026-10-09_18-51-27PM_1.log
Invoking utility "listorderedinactivepatches"
List Inactive patches option provided
The oracle home has the following inactive patch(es) and their respective overlay patches:
The number of RU chains is 2
***** There are 4 inactive RU patches in chain 1
-Inactive RU/BP 29517242:Database Release Update : 19.3.0.0.190416 (29517242), installed on: Thu Apr 18 07:21:17 GMT 2019, with no overlays
-Inactive RU/BP 30869156:Database Release Update : 19.7.0.0.200414 (30869156), installed on: Wed May 13 17:09:52 GMT 2020, with no overlays
-Inactive RU/BP 34133642:Database Release Update : 19.16.0.0.220719 (34133642), installed on: Mon Apr 03 11:37:24 GMT 2023, with no overlays
-Inactive RU/BP 34419443:Database Release Update : 19.17.0.0.221018 (34419443), installed on: Mon Apr 03 12:41:37 GMT 2023, with overlays: 31222103
-Active RU/BP 39472050:Database Release Update : 19.32.0.0.260721 (39472050), installed on: Fri Oct 09 18:30:36 GMT 2026, with no overlays
***** There are 2 inactive RU patches in chain 2
-Inactive RU/BP 30805684:OJVM RELEASE UPDATE: 19.7.0.0.200414 (30805684), installed on: Wed May 13 17:13:27 GMT 2020, with no overlays
-Inactive RU/BP 34086870:OJVM RELEASE UPDATE: 19.16.0.0.220719 (34086870), installed on: Mon Apr 03 11:32:07 GMT 2023, with no overlays
-Active RU/BP 34411846:OJVM RELEASE UPDATE: 19.17.0.0.221018 (34411846), installed on: Mon Apr 03 12:37:43 GMT 2023, with no overlays
OPatch succeeded.
$ $ORACLE_HOME/OPatch/opatch util deleteinactivepatches
Oracle Interim Patch Installer version 12.2.0.1.53
Copyright (c) 2026, Oracle Corporation. All rights reserved.
Oracle Home : /u01/db/19c/sales
Central Inventory : /u01/app/inventory
from : /u01/db/19c/sales/oraInst.loc
OPatch version : 12.2.0.1.53
OUI version : 12.2.0.7.0
Log file location : /u01/db/19c/sales/cfgtoollogs/opatch/opatch2026-10-09_18-53-58PM_1.log
Invoking utility "deleteinactivepatches"
Inactive Patches Cleanup option provided
Delete Inactive Patches .......
***** There are 4 inactive RU patches in chain 1
***** 3 inactive patches will be deleted
-To be deleted inactive RU/BP 29517242:Database Release Update : 19.3.0.0.190416 (29517242), installed on: Thu Apr 18 07:21:17 GMT 2019, with no overlays
-To be deleted inactive RU/BP 30869156:Database Release Update : 19.7.0.0.200414 (30869156), installed on: Wed May 13 17:09:52 GMT 2020, with no overlays
-To be deleted inactive RU/BP 34133642:Database Release Update : 19.16.0.0.220719 (34133642), installed on: Mon Apr 03 11:37:24 GMT 2023, with no overlays
-To be retained inactive RU/BP 34419443:Database Release Update : 19.17.0.0.221018 (34419443), installed on: Mon Apr 03 12:41:37 GMT 2023, with overlays: 31222103
-Active RU/BP 39472050:Database Release Update : 19.32.0.0.260721 (39472050), installed on: Fri Oct 09 18:30:36 GMT 2026, with no overlays
***** There are 2 inactive RU patches in chain 2
***** 1 inactive patches will be deleted
-To be deleted inactive RU/BP 30805684:OJVM RELEASE UPDATE: 19.7.0.0.200414 (30805684), installed on: Wed May 13 17:13:27 GMT 2020, with no overlays
-To be retained inactive RU/BP 34086870:OJVM RELEASE UPDATE: 19.16.0.0.220719 (34086870), installed on: Mon Apr 03 11:32:07 GMT 2023, with no overlays
-Active RU/BP 34411846:OJVM RELEASE UPDATE: 19.17.0.0.221018 (34411846), installed on: Mon Apr 03 12:37:43 GMT 2023, with no overlays
Do you want to proceed? [y|n]
y
User Responded with: Y
Deleted RU/BP patch: 29517242
Deleted RU/BP patch: 30869156
Deleted RU/BP patch: 34133642
Deleted RU/BP patch: 30805684
OPatch succeeded.
Let’s apply the September 2026 MRP on top of the July 2026 RU. Shutdown the instances and listener. Then verify for conflicts and apply the MRP.
$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph /home/oracle/39971265/
Oracle Interim Patch Installer version 12.2.0.1.53
Copyright (c) 2026, Oracle Corporation. All rights reserved.
PREREQ session
Oracle Home : /u01/db/19c/sales
Central Inventory : /u01/app/inventory
from : /u01/db/19c/sales/oraInst.loc
OPatch version : 12.2.0.1.53
OUI version : 12.2.0.7.0
Log file location : /u01/db/19c/sales/cfgtoollogs/opatch/opatch2026-10-09_19-14-19PM_1.log
Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.
$ $ORACLE_HOME/OPatch/opatch napply .
Oracle Interim Patch Installer version 12.2.0.1.53
Copyright (c) 2026, Oracle Corporation. All rights reserved.
Oracle Home : /u01/db/19c/sales
Central Inventory : /u01/app/inventory
from : /u01/db/19c/sales/oraInst.loc
OPatch version : 12.2.0.1.53
OUI version : 12.2.0.7.0
Log file location : /u01/db/19c/sales/cfgtoollogs/opatch/opatch2026-10-09_19-15-44PM_1.log
Verifying environment and performing prerequisite checks...
OPatch continues with these patches: 39487170 39570655 39570736 39661089 39750798 39761039 39761126 39763853 39779336 39833225 39890510 39897693 39901922 39935553 39951966
Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.
Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/u01/db/19c/sales')
Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
Applying interim patch '39487170' to OH '/u01/db/19c/sales'
Patching component oracle.rdbms.rsf, 19.0.0.0.0...
Patching component oracle.xdk.rsf, 19.0.0.0.0...
Patching component oracle.rdbms, 19.0.0.0.0...
...
Patches 39487170,39570655,39570736,39661089,39750798,39761039,39761126,39763853,39779336,39833225,39890510,39897693,39901922,39935553,39951966 successfully applied.
Log file location: /u01/db/19c/sales/cfgtoollogs/opatch/opatch2026-10-09_19-15-44PM_1.log
OPatch succeeded.
Verify the logs. Start the instances and listener. Then execute a datapatch sanity and a datapatch on the DB.
$ ./datapatch
SQL Patching tool version 19.32.0.0.0 Production on Fri Oct 9 19:31:20 2026
Copyright (c) 2012, 2026, Oracle. All rights reserved.
Log file for this invocation: /u01/app/19c/cfgtoollogs/sqlpatch/sqlpatch_22646_2026_10_09_19_31_20/sqlpatch_invocation.log
Connecting to database...OK
Gathering database info...done
Note: Datapatch will only apply or rollback SQL fixes for PDBs
that are in an open state, no patches will be applied to closed PDBs.
Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation
(Doc ID 1585822.1)
Bootstrapping registry and package to current versions...done
Determining current state...done
...
SQL Patching tool complete on Fri Oct 9 19:31:44 2026
Let’s create the gold image. We can use the standard runInstaller method or we can use an automation tool like Oracle Enterprise Manager Fleet Maintenance.
For the first gold image we are going to use the runInstaller method.
$ $ORACLE_HOME/runInstaller -silent -createGoldImage -destinationLocation /home/oracle
Launching Oracle Database Setup Wizard...
Successfully Setup Software.
Gold Image location: /home/oracle/db_home_2026-10-09_07-01-14PM.zip
After this we already have an Oracle home gold image created that we can use for later deployment. Let’s also show an automated way to create and manage the gold images using Oracle Enterprise Manager (EM).
Using the Oracle Database Lifecycle Management pack, we can easily manage gold image using the console. If you navigate to the Database targets page and click on the Administrator menu and then select Fleet Maintenance Hub, you can access the Fleet Maintenance functionality.

Then navigate to Patch Recommendations for Images.

Enterprise Manager integrates with My Oracle Support (MOS) to identify recommended and missing patches for existing Gold Images, helping DBAs maintain current, secure, and consistent software baselines. Administrators can create and manage Gold Image versions, promote approved versions, and deploy them across subscribed targets using automated, out-of-place patching workflows. This approach reduces configuration drift, simplifies patch compliance tracking, minimizes manual effort, and enables organizations to adopt a more frequent and consistent security patching cadence.
This covered few options of creating and maintaining Oracle database home gold images.
Thanks,
Alfredo



















