When applying an ODA patch, you use a dedicated patch bundle which include the patches for all the different component ranging from the disk firmware and the OS to the database software itself. These patch bundles are then installed using oakcli (or odacli, depending on your ODA version).
Given this patch methodology and given that an ODA really needs to be considered an appliance (hence the name Oracle Database Appliance), it is generally not advised to install additional one-off patches.
But, not recommended is not the same as not allowed and certainly not the same as not possible.
And let’s face it, sometimes you run into a bug that is important enough for you that you can’t wait until the next ODA patch bundle (and hope the fix will be included).
Applying the one-off patch is simple enough, using the standard opatch utility.
Just don’t forget to uninstall the patch before you install a new ODA patch bundle.
However, it becomes more annoying when you need to find out if an one-off patch you have installed will be conflicting with the new patch bundle or not.
Requesting merge patches takes time, so this is not something you want to find out after applying the ODA patch bundle.
Note 888888.1 on Oracle Support will show you which PSU bundle is included in the ODA patch bundle, but it will not show you which additional one-off patches are included in the bundle.
And neither will the patch bundle readme nor any other MOS note (at least none that I found).
This caused me to search for another way to get this information.
Extracting the ODA patch list
One way I found was to use the db home clone file, which accompanies each new ODA patch bundle.
This file is in essence a tarred Oracle Home, which is used to setup a new Oracle Home when creating an Oracle database. And which has all the database patches from the patch bundle “pre-installed”.
As each Oracle Home has their own inventory which stores the information on the installed patches, we can use this inventory to list the patches.
1. Listing the ODA patch numbers
First, we need to extract the inventory part of the clone file.
Using some pipe constructs, this can be done without extracting everyting
[root@nnnnnnnn clone_files_12.1.2.12.0]# unzip -l p19520042_1212120_Linux-x86-64.zip Archive: p19520042_1212120_Linux-x86-64.zip Length Date Time Name --------- ---------- ----- ---- 2717317120 09-21-2017 07:11 OAKEndUserBundle_12.1.2.12.0_170920.tar 1303 09-30-2017 03:33 README.txt --------- ------- 2717318423 2 files [root@nnnnnnnn clone_files_12.1.2.12.0]# unzip -p p19520042_1212120_Linux-x86-64.zip OAKEndUserBundle_12.1.2.12.0_170920.tar | tar -tf - ./pkgrepos/orapkgs/DB/12.1.0.2.170814/Base/db121.tar.gz ./pkgrepos/System/12.1.2.12.0/conf/EndUserImage.xml [root@nnnnnnnn clone_files_12.1.2.12.0]# unzip -p p19520042_1212120_Linux-x86-64.zip OAKEndUserBundle_12.1.2.12.0_170920.tar | tar -xf - -O ./pkgrepos/orapkgs/DB/12.1.0.2.170814/Base/db121.tar.gz | tar -xzf - inventory/oneoffs/
Now that we have extracted the files from the inventory into the current directory. We can list the patch numbers:
[root@nnnnnnnn clone_files_12.1.2.12.0]# cd inventory/oneoffs/ [root@nnnnnnnn oneoffs]# ls -alh total 76K drwxr-xr-x 19 oracle oinstall 4,0K sep 8 20:01 . drwxr-xr-x 3 root root 4,0K okt 10 13:19 .. drwxr-xr-x 4 oracle oinstall 4,0K sep 8 19:58 19769480 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 19:58 20299023 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 19:58 20831110 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 19:58 21359755 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 19:59 21794615 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 19:58 21948354 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 19:58 22291127 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 19:58 23054246 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 19:58 24006101 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 19:58 24732082 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 20:00 25034396 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 19:58 25171037 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 19:58 25755742 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 20:00 25897615 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 20:01 26477255 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 19:58 26609783 drwxr-xr-x 4 oracle oinstall 4,0K sep 8 20:01 26609945
2. Excluding the PSU
Some of these patches are part of the PSU patch bundle. To exclude these, we can search for the composite.xml file and list the contents
[root@nnnnnnnn oneoffs]# ls -alh ./*/etc/config/composite.xml -rw-r----- 1 oracle oinstall 484 sep 8 12:55 ./26609783/etc/config/composite.xml [root@nnnnnnnn oneoffs]# cat ./26609783/etc/config/composite.xml
Excluding the patches listed in the file from the patches found in the inventory/oneoffs/ directory leaves us with the following patches:
- 21794615
- 25034396
- 25897615
- 26477255
- 26609945
In addition to get more information on these patches, we can look at the inventory.xml file within each patch sub directory
[root@nnnnnnnn oneoffs]# cat ./21794615/etc/config/inventory.xml 12.1.0.1.4 21536483 false true true false false false false
3. Filtering the one-off patches
One of these patches will be the OCW Patch Update, which is also part of the PSU itself and thus can also be excluded.
After checking the remaining patches, we get the following list of one-off patches that will be installed on top of the PSU bundle patch as part of the 12.1.2.12 patch bundle:
21794615 21794615 - LNX64-122-RAC-CDB LMS HUNG ON 'LATCH GC ELEMENT',LMD ORA-600[KJMSCNDSCQ TIMEOUT 25034396 25034396 - ADVM VOLUMES SHOULD SUPPORT MAXIMUM FILE SIZE OF 1PB 25897615 25897615 - ORA-600 [KGFMGETCTX0], [KGFM.C] 26477255 23053606 - LNX64-121-CMT FAIL TO PATCH GI ON 1ST NODE ERROR SET ASM TO ROLLING PATCH MODE" 23108128 - TRACKING BUG TO SUPPORT FLASH AND REDO DISKGROUP ON SAME DISK FOR ODALITE LARGE" 26430737 - TRACKER BUG FOR RTI 20192990 THAT FIXES REGRESSION IN BUG 25601566"
Conclusion
When patching an ODA, additional one-off patches are installed on top of the Patch Set Update. But Oracle has not documented which ones.
Therefore, you can use the method above to find this information using the db home clone file.
ps) If you are looking for other interesting MOS notes you can checkout our Handy Oracle support notes list.