19C SE2 und ein ORA-38153

11.
Mai
2023
Veröffentlicht von: Hans Wesnitzer

Im Alertlog einer 19c SE2 Datenbank erscheint immer wieder die Fehlermeldung ORA-38153: Software edition is incompatible with SQL plan management. In diesem Artikel erfahren Sie, weshalb diese Meldung erscheint und wie Sie diesen Fehler wieder loswerden.

Der Fehler ORA-38153 ist bereits seit Version 18.3 vorhanden, tritt jedoch bei 19c SE2 Datenbanken immer noch auf. Nachdem vor Kurzem einer unserer Kunden danach fragte (bisher war nur die Enterprise Edition im Einsatz), beschreibt dieser Artikel die Lösung für dieses Problem in Kürze.
 

Das Problem

Bei 19c Datenbanken vom Typ Standard Edition 2 (SE2) taucht im Alertlog der Datenbankinstanz regelmäßig die folgende Fehlermeldung auf (am Beispiel einer DB unter Linux; wobei Windows ebenso betroffen ist):

2023-04-18T22:00:02.962199+02:00
Errors in file /u01/app/oracle/diag/rdbms/db19se/DB19SE/trace/DB19SE_j003_3194.trc:
ORA-12012: error on auto execute of job "SYS"."ORA$AT_SQ_SQL_SW_1923"
ORA-38153: Software edition is incompatible with SQL plan management.
ORA-06512: at "SYS.DBMS_SPM_INTERNAL", line 6255
ORA-06512: at "SYS.DBMS_SPM", line 2824
ORA-06512: at line 34

 

Was schreibt Oracle zu dieser Fehlermeldung:

$ oerr ora 38153
38153, 00000, "Software edition is incompatible with SQL plan management."
// *Cause: SQL plan management could be used only with Oracle Database Enterprise Edition.
// *Action: Ensure that Oracle is linked with the Enterprise Edition options.

 

Erklärungen

Hier wird also das Oracle Feature „SQL Plan Management“ verwendet, dass nur in der Enterprise Edition zur Verfügung stehen sollte. Aber so ganz stimmt das auch wieder nicht, denn wie ein Blick in den 19c License Guide zeigt, kann dieses Feature auch in der SE2 Datenbank verwendet werden (wenn auch nur etwas eingeschränkter):

SQL Plan Management does not require a license for Oracle Diagnostics Pack or Oracle Tuning Pack.
SE2 and DBCS SE Summary: Only one SQL plan baseline per SQL statement is allowed and SQL plan evolution is disabled.
SE2 and DBCS SE Details:

  1.  SQL plan baselines can be created or captured using the following methods
    • Auto capture (OPTIMIZER_CAPTURE_SQL_PLAN_BASELINE=TRUE)
    • Manual loading from the cursor cache (DBMS_SPM.LOAD_PLANS_FROM CURSOR_CACHE)
    • Migration from stored outlines (DBMS_SPM.MIGRATE_STORED_OUTLINE)
    •  Import using DBMS_SPM.UNPACK_STGTAB_BASELINE
  2. All capture and creation methods store only one SQL plan baseline per SQL statement.
  3. SQL plan baselines can be exported and imported using DBMS_SPM.CREATE_STGTAB_BASELINE, DBMS_SPM.PACK_STGTAB_BASELINE, and DBMS_SPM.UNPACK_STGTAB_BASELINE.
  4. Unused SQL plan baselines are not auto-purged.
  5. Alternative SQL execution plans for SQL statements are not added to the SQL plan history.
  6. SQL plan baselines can be altered and dropped (DBMS_SPM.ALTER_SQL_PLAN_BASELINE and DBMS_SPM.DROP_SQL_PLAN_BASELINE).
  7. The following DBMS_SPM functions and procedures are not allowed: CONFIGURE, LOAD_PLANS_FROM_AWR, LOAD_PLANS_FROM_SQLSET, and all functions and procedures associated with SQL plan evolution.

Die Fehlermeldungen im Alertlog entstehen aber dadurch, weil Oracle in seinen Datenbanken – unabhängig von der Edition – regelmäßig interne Aufgaben ausführt, die sogenannten Auto-Tasks.

Eine dieser Auto-Tasks verwendet den SQL Tuning Advisor der wiederum im Hintergrund den Automatic SPM Evolve Advisor aufruft. Und dieser Aufruf erzeugt die im Alertlog zu findende Fehlermeldung. Einzeln abschalten kann man den Aufruf des Automatic SPM Evolve Advisor leider nicht und auch das explizite Deaktivieren des Tuning Packs (was Sie in Ihrer SE2 Datenbank hoffentlich auch immer machen) über den Initialisierungs-Parameter CONTROL_MANAGEMENT_PACK_ACCESS (NONE) hilft nichts.


Die Lösung

Damit die Fehlermeldung aus dem Alertlog verschwindet, muss die Auto-Task „SQL Tuning Advisor“ deaktiviert werden (siehe MOS Doc ID 2448865.1).

Dies erfolgt mit folgendem Befehl:

BEGIN
  DBMS_AUTO_TASK_ADMIN.DISABLE (
    client_name => 'sql tuning advisor',
    operation   => NULL,
    window_name => NULL
);
END;
/

 

Beispiel

SYS@DB19SE> set lines 200
SYS@DB19SE> col CLIENT_NAME for a40
SYS@DB19SE> col OPERATION_NAME for a30
SYS@DB19SE> select CLIENT_NAME,OPERATION_NAME,STATUS from DBA_AUTOTASK_OPERATION;

CLIENT_NAME                              OPERATION_NAME                 STATUS
---------------------------------------- ------------------------------ --------
auto optimizer stats collection          auto optimizer stats job       ENABLED
auto space advisor                       auto space advisor job         ENABLED
sql tuning advisor                       automatic sql tuning task      ENABLED

3 rows selected.

SYS@DB19SE> BEGIN
  2    DBMS_AUTO_TASK_ADMIN.DISABLE (
  3      client_name => 'sql tuning advisor',
  4      operation   => NULL,
  5      window_name => NULL
  6  );
  7  END;
  8  /

PL/SQL procedure successfully completed.

SYS@DB19SE> select CLIENT_NAME,OPERATION_NAME,STATUS from DBA_AUTOTASK_OPERATION;

CLIENT_NAME                              OPERATION_NAME                 STATUS
---------------------------------------- ------------------------------ --------
auto optimizer stats collection          auto optimizer stats job       ENABLED
auto space advisor                       auto space advisor job         ENABLED
sql tuning advisor                       automatic sql tuning task      DISABLED

3 rows selected.

 

Fazit

Schade eigentlich, dass Oracle immer noch nicht zwischen SE2 und EE Datenbanken unterscheiden kann …

 

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.