Mit Oracle 10g wurde das Package DBMS_SCHEDULER eingeführt. Bis dato gab es die DBMS Jobs. Ab Oracle 12 Release 2 wurde das Package DBMS_JOB auf deprecated gesetzt. Bei folgenden Aktionen
werden in Zusammenhang mit Oracle 19c, DBMS-Jobs zu DBMS-Scheduler Tasks konvertiert.
Die Abfrage auf USER_JOBS vom Benutzer MQS_LTM liefert folgendes Ergebnis:
JOB LAST_DATE NEXT_DATE BROKEN WHAT
------- -------------------- -------------------- ---------- ----------------------------------------
62 21.07.2019 03:00:04 17.07.2019 19:52:40 N pkg_ltm_collect.p_purge(31);
64 21.07.2019 04:00:00 18.07.2019 04:00:00 N pkg_mqs_err.purge_error_log(31);
63 21.07.2019 04:00:00 18.07.2019 04:00:00 N pkg_mqs_trace.purge_trace_log(31);
61 21.07.2019 10:31:02 18.07.2019 03:00:00 N pkg_ltm_collect.p_collect;
Die Abfrage auf USER_JOBS vom Benutzer MQS_LTM liefert folgendes Ergebnis:
JOB LAST_DATE NEXT_DATE BROKEN WHAT
------- -------------------- -------------------- ---------- ----------------------------------------
61 17.07.2019 19:52:40 N pkg_ltm_collect.p_collect;
64 18.07.2019 04:00:00 N pkg_mqs_err.purge_error_log(31);
63 18.07.2019 04:00:00 N pkg_mqs_trace.purge_trace_log(31);
62 18.07.2019 03:00:00 N pkg_ltm_collect.p_purge(31);
Die Abfrage auf USER_SCHEDULER_JOBS liefert folgendes Ergebnis:
JOB_NAME JOB_TYPE JOB_ACTION START_DATE REPEAT_INTERVAL ENABLED
--------------- ---------------- ----------------------------------- ------------------- ------------------------- --------
DBMS_JOB$_61 PLSQL_BLOCK pkg_ltm_collect.p_collect; 17.07.2019 19:52:40 SYSDATE+5/1440 TRUE
DBMS_JOB$_62 PLSQL_BLOCK pkg_ltm_collect.p_purge(31); 18.07.2019 04:00:00 trunc(sysdate+1)+3/24 TRUE
DBMS_JOB$_63 PLSQL_BLOCK pkg_mqs_trace.purge_trace_log(31); 18.07.2019 04:00:00 trunc(sysdate+1)+4/24 TRUE
DBMS_JOB$_64 PLSQL_BLOCK pkg_mqs_err.purge_error_log(31); 18.07.2019 04:00:00 trunc(sysdate+1)+4/24 TRUE
HINWEIS: Die Jobs sind sowohl in der View USER_JOBS und USER_SCHEDULER_JOBS aktiv!
Wird mit DBMS_JOB.submit ein Job unter 19c angelegt, was möglich ist, taucht dieser in beiden Views (USER_JOBS und USER_SCHEDULER_JOBS) auf und ist zweimal aktiv!
SQL*Plus: Release 19.0.0.0.0 - Production on Sun Jul 21 12:42:04 2019
Version 19.4.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Sun Jul 21 2019 11:28:35 +02:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
SQL>
set serveroutput on
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'pkg_ltm_collect.p_collect;'
,next_date => to_date('21.07.2019 19:52:40','dd/mm/yyyy hh24:mi:ss')
,interval => 'SYSDATE+5/1440'
,no_parse => FALSE
,instance => 1
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
/
show error
commit;
Job Number is: 106
No errors.
JOB_NAME JOB_ACTION ENABLED START_DATE
--------------- ----------------------------------- ---------- -----------------
DBMS_JOB$_106 pkg_ltm_collect.p_collect; TRUE 21.07.19 12:31:29
JOB LAST_DATE NEXT_DATE BROKEN WHAT
------- -------------------- -------------------- -------------------- ---------- --------------------------
106 21.07.2019 12:31:29 21.07.2019 12:36:29 N pkg_ltm_collect.p_collect;
Das bedeutet, der Job_Name DBMS_JOB$_106 bzw. der Job 106 wird zeitgleich doppelt ausgeführt.
Vor der Migration / dem Upgrade auf Oracle 19c empfehlen wir die „alten“ DBMS-Jobs nach DBMS-Scheduler Tasks zu migrieren. Auch sollten die vorhandenen Prozdeuren und/oder Packages auf die Verwendung von DBMS_JOB geprüft werden. Dabei können wir Ihnen gerne behilflich sein.
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.