DBMS_OPTIM_BUNDLE – what it shows, and what oradiff lists

I blogged multiple times about DBMS_OPTIM_BUNDLE, the package to work with the Fix Control Persistence (FCP) framework in the database. And we also gave recommendations over the years that you need to test carefully when you are going to enable the fixes while patching. But it is a good practice do enable them when you do upgrade testing, and also when you start creating new databases in a new environment. Just make sure you keep the settings equal across your environments. The other day I received a question from Dennis asking about DBMS_OPTIM_BUNDLE – what it shows, and what oradiff lists.

DBMS_OPTIM_BUNDLE - what it shows, and what oradiff lists

Photo by Steve A Johnson on Unsplash

DBMS_OPTIM_BUNDLE?

As mentioned, I blogged a bit about it over the years, and you can browse through the various blog posts of interest.

The key is that you are using this command to see the fixes you can toggle (mostly to enable them, some also to disable them) via the package:

SQL> set serveroutput on;
SQL> execute dbms_optim_bundle.getBugsforBundle;

Once you have the list, you can toggle the entire stack with one single call:

SQL> execute dbms_optim_bundle.enable_optim_fixes('ON','BOTH', 'YES');

Make sure you check beforehand whether you have other fixes set under _fix_control as the above call will wipe them out.

 

Why is there a divergence?

Coming back to the topic Dennis raised (and thanks again for bringing this up). He did wonder for the 19.30 Release Update 5 fixes get listed:

SQL> execute dbms_optim_bundle.getBugsforBundle(260120);
….
19.30.0.0.260120DBRU:
    Bug: 34807859,  fix_controls: 34807859
    Bug: 37695497,  fix_controls: 37695497
    Bug: 31495387,  fix_controls: 31495387
    Bug: 33875479,  fix_controls: 32455005
    Bug: 34396205,  fix_controls: 34396205

when oradiff.oracle.com lists 7 ??

At first, you need to logon to oradiff.oracle.com, and under “Included Fixes” with the subitem “Fix Controls” you can do this comparison:

DBMS_OPTIM_BUNDLE - what it shows, and what oradiff lists

oradiff.oracle.com ==> Included Fixes ==> Fix Controls: 19.29 vs 19.30

I think the package lists zero in 19.31 while oradiff lists 5 fix controls.

 

Why this divergence?

First of all, oradiff.oracle.com takes the information simply from V$SYSTEM_FIX_CONTROL as you can see in the above screenshot – and of course in oradiff.oracle.com itself, too. Hence, this isn’t a secret.

But why is there a divergence?

We did ask internally, and we learned that the difference comes from where the fix gets in. If it is coming with an RU only, then it will be covered under the FCP regime, and you can easily enable/disable it at will with the above calls. But when it had been implemented into the MAIN code line, too, then it doesn’t get covered under FCP assuming it has a given setting right out of the box. This is required for consistency across releases as well.

Still, it gets listed in the V$SYSTEM_FIX_CONTROL because it has a switch, and you can toggle it if you want or need to toggle it.

I know, this doesn’t sound logic at first sight. But be assured that it makes sense and is required in the way how FCP is implemented. In case you ever ask yourself the same thing Dennis did, you will find the reasoning here.

 

Further Links and Information

–Mike