Autoupgrade 24.5.240701 / ORA-12850 wenn in PDB$SEED Optionen fehlen

Dieser Blog ist auch als DOAG Datenbank Kolumne erschienen.

Ausgangssituation

Es wurde eine CDB Datenbank mit Oracle 19.22 ohne Optionen angelegt (DBCA im Silent Mode). Beim Prüfen der Voraussetzungen für das plugin einer PDB wurde festgestellt, dass die PDB zusätzliche Optionen benötigt. Diese wurden in der CDB – wieder mit dem DBCA im Silent Mode – hinzugeführt und das plugin der PDB war erfolgreich.

Der DBCA im GUI Mode hat im Dialog für „Add Option“ die Möglichkeit zu sagen, dass diese Optionen auch in der PDB$SEED hinzugefügt werden sollen. Im Silent Mode gibt es dafür keinen Parameter.

Da die Prüfung in PDB_PLUG_IN_VIOLATIONS, ob das Plugin erfolgreich war, nur für die neue PDB durchgeführt wurde, ist das Fehlen der Optionen in der PDB$SEED nicht sofort aufgefallen.

Das Upgrade von 19.22 auf 19.23 mittels einer älteren Version von Autoupgrade war dann ohne ein Problem möglich. Der Versuch mittels dem aktuellen Autoupgrade 24.5.240701 von 19.23 auf 19.24 zu patchen, endete beim Autoupgrade Analyze Schritt in folgender Fehlermeldung:

ERROR at line 1:
ORA-12850: Could not allocate slaves on all specified instances: 2 needed, 0 allocated
] [EDMTEST]
2024-08-26 11:18:02.671 ERROR Dispatcher failed: [Unexpected exception error]
oracle.upgrade.autoupgrade.utils.errors.SteadyDataInitException: [Unexpected exception error]
        at oracle.upgrade.commons.dbinspector.tools.SteadyData.loadContext(SteadyData.java:333)
        at oracle.upgrade.autoupgrade.dbchecks.standard.checks.ChecksController.updateSteadyData(ChecksController.java:185)
        at oracle.upgrade.autoupgrade.dbchecks.standard.checks.ChecksController.loadDatabaseInformation(ChecksController.java:404)
        at oracle.upgrade.autoupgrade.dbchecks.standard.checks.ChecksController.executeChecks(ChecksController.java:113)
        at oracle.upgrade.autoupgrade.dispatcher.facade.subsystems.ExecuteChecks.executeStage(ExecuteChecks.java:85)
        at oracle.commons.dispatcher.JobStage.executeStage(JobStage.java:80)
        at oracle.commons.dispatcher.RunJobDefinition.runJob(RunJobDefinition.java:142)
        at oracle.upgrade.autoupgrade.dispatcher.v2.def.RunAutoUpgradeJob.executeDispatcher(RunAutoUpgradeJob.java:62)
        at oracle.upgrade.autoupgrade.dispatcher.AutoUpgDispatcher.run_(AutoUpgDispatcher.java:261)
        at oracle.upgrade.autoupgrade.dispatcher.AutoUpgDispatcher.run(AutoUpgDispatcher.java:244)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:750)
 
2024-08-26 11:18:02.676 ERROR Error running dispatcher for job 105
Cause: Loading the current state of the database failed
2024-08-26 11:18:02.676 ERROR Dispatcher failed:
Error: UPG-1319
[Unexpected exception error]
Cause: Loading the current state of the database failed

Nach eingehender Analyse zeigte sich das Problem, dass in der PDB$SEED nicht alle Optionen der CDB und EDMTEST enthalten waren. In pdb_plug_in_violations war das einfach festzustellen.

select * from pdb_plug_in_violations where status='PENDING';

Lösung

Mit den folgenden Aufrufen wurden die fehlenden Optionen in der PDB$SEED nachinstalliert:

alter pluggable database pdb$seed close;
alter pluggable database pdb$seed open;

host /u01/app/oracle/product/19.23/perl/bin/perl /u01/app/oracle/product/19.23/rdbms/admin/catcon.pl -n 1 -l /u01/app/oracle/admin/test2/scripts -v  -b initjvm -c  'PDB$SEED'   -U "SYS"/"&&sysPassword" /u01/app/oracle/product/19.23/javavm/install/initjvm.sql;
host /u01/app/oracle/product/19.23/perl/bin/perl /u01/app/oracle/product/19.23/rdbms/admin/catcon.pl -n 1 -l /u01/app/oracle/admin/test2/scripts -v  -b initxml -c  'PDB$SEED'   -U "SYS"/"&&sysPassword" /u01/app/oracle/product/19.23/xdk/admin/initxml.sql;
host /u01/app/oracle/product/19.23/perl/bin/perl /u01/app/oracle/product/19.23/rdbms/admin/catcon.pl -n 1 -l /u01/app/oracle/admin/test2/scripts -v  -b xmlja -c  'PDB$SEED'   -U "SYS"/"&&sysPassword" /u01/app/oracle/product/19.23/xdk/admin/xmlja.sql;
host /u01/app/oracle/product/19.23/perl/bin/perl /u01/app/oracle/product/19.23/rdbms/admin/catcon.pl -n 1 -l /u01/app/oracle/admin/test2/scripts -v  -b catjava -c  'PDB$SEED'   -U "SYS"/"&&sysPassword" /u01/app/oracle/product/19.23/rdbms/admin/catjava.sql;
host /u01/app/oracle/product/19.23/perl/bin/perl /u01/app/oracle/product/19.23/rdbms/admin/catcon.pl -n 1 -l /u01/app/oracle/admin/test2/scripts -v  -b catxdbj -c  'PDB$SEED'   -U "SYS"/"&&sysPassword" /u01/app/oracle/product/19.23/rdbms/admin/catxdbj.sql;
host /u01/app/oracle/product/19.23/perl/bin/perl /u01/app/oracle/product/19.23/rdbms/admin/catcon.pl -n 1 -l /u01/app/oracle/admin/test2/scripts -v  -b catctx -c  'PDB$SEED'   -U "SYS"/"&&sysPassword" -a 1  /u01/app/oracle/product/19.23/ctx/admin/catctx.sql 1Xbkfsdcdf1ggh_123 1SYSAUX 1TEMP 1LOCK;
host /u01/app/oracle/product/19.23/perl/bin/perl /u01/app/oracle/product/19.23/rdbms/admin/catcon.pl -n 1 -l /u01/app/oracle/admin/test2/scripts -v  -b dr0defin -c  'PDB$SEED'  -u CTXSYS/CTXSYS  -U "SYS"/"&&sysPassword" -a 1  /u01/app/oracle/product/19.23/ctx/admin/defaults/dr0defin.sql 1\"AMERICAN\";
host /u01/app/oracle/product/19.23/perl/bin/perl /u01/app/oracle/product/19.23/rdbms/admin/catcon.pl -n 1 -l /u01/app/oracle/admin/test2/scripts -v  -b dbmsxdbt -c  'PDB$SEED'   -U "SYS"/"&&sysPassword" /u01/app/oracle/product/19.23/rdbms/admin/dbmsxdbt.sql;
host /u01/app/oracle/product/19.23/perl/bin/perl /u01/app/oracle/product/19.23/rdbms/admin/catcon.pl -n 1 -l /u01/app/oracle/admin/test2/scripts -v  -b iminst -c  'PDB$SEED'   -U "SYS"/"&&sysPassword" /u01/app/oracle/product/19.23/ord/im/admin/iminst.sql;
host /u01/app/oracle/product/19.23/perl/bin/perl /u01/app/oracle/product/19.23/rdbms/admin/catcon.pl -n 1 -l /u01/app/oracle/admin/test2/scripts -v  -b olap -c  'PDB$SEED'   -U "SYS"/"&&sysPassword" -a 1  /u01/app/oracle/product/19.23/olap/admin/olap.sql 1SYSAUX 1TEMP;
host /u01/app/oracle/product/19.23/perl/bin/perl /u01/app/oracle/product/19.23/rdbms/admin/catcon.pl -n 1 -l /u01/app/oracle/admin/test2/scripts -v  -b utlrp  -U "SYS"/"&&sysPassword" /u01/app/oracle/product/19.23/rdbms/admin/utlrp.sql;

alter pluggable database pdb$seed close;
alter pluggable database pdb$seed open read only;

Jetzt gab es keine offenen pdb_plug_in_violations und das Patching war erfolgreich.