2010-12-09 8 views
2

Hey Leute, Ich frage mich, wie Sie einen Job-Scheduler in Oracle APEX erstellen?dbms_job/Oracle Job Scheduler

Ich mache ein System, das Anrufe verwaltet, jeder Anruf hat einen Schweregrad. Nach einer Stunde sollte der Schweregrad eskaliert werden. Ich habe stundenlang gesucht, und ich denke, dass ich eine Prozedur erstellen muss, die einen Job-Scheduler definiert und dann das Update ausführt?

Wenn Sie einige Vorschläge auf meine Art und Weise werfen könnte, würde ich es begrüßen!

Prost Reiche

Antwort

3

Meiner Ansicht nach möglichst einfache Lösung, die möglicherweise etwas wäre könnte funktionieren wie

CREATE PROCEDURE escalate_cases 
AS 
BEGIN 
    UPDATE tickets 
    SET status = 'ESCALATED' 
    WHERE status = 'NOT ESCALATED' 
    AND open_date < sysdate - interval '1' hour; 
END escalate_cases; 

DECLARE 
    l_jobno PLS_INTEGER; 
BEGIN 
    dbms_job.submit( 
    l_jobno, 
    'BEGIN escalate_cases(); END;', 
    sysdate + interval '1' minute, 
    'sysdate + interval ''1'' minute' 
); 
    dbms_output.put_line('Job ' || l_jobno || ' submitted.'); 
    commit; 
END; 

Das Verfahren eskaliert alle Tickets, die Ihren Kriterien und der anonymen Block erfüllen schafft ein Job, der den Vorgang jede Minute ausführt. Ein einzelner Job, der jede Minute ausgeführt wird (oder alle paar Minuten, je nachdem, wie lange Sie warten müssen, bis ein Ticket eskaliert), wird einfacher zu verwalten sein als ein separater Job für jedes Ticket, das genau eine Stunde nach dem Senden ausgeführt wird .

Nun, wenn Sie etwas anspruchsvoller werden wollen, bietet das DBMS_SCHEDULER-Paket ziemlich viel Funktionalität, die das DBMS_JOB-Paket nicht bietet. Es bietet einige automatische Protokollierung, es bietet die Möglichkeit, Jobs zu ketten, verschiedene Fenster zu definieren, in denen Jobs ausgeführt werden und nicht ausgeführt werden (dh wenn ein Ticket um 5:30 erstellt wird, möchten Sie es möglicherweise nicht um 6:30 eskalieren ist nach Stunden), usw. Und DBMS_SCHEDULER ist die Richtung, die Oracle bewegt. Aber ich benutze immer noch DBMS_JOB für relativ einfache Aufgaben wie diese.

+0

Eine nette Eigenschaft von 'DBMS_JOB' ist, dass Sie einen Job aus einem Tabellenauslöser erstellen können - wenn das Ihr Stil ist :). Der aufrufende Prozess fügt also einfach das Ticket ein, und ein Auslöser in der Tabelle erstellt einen Job, um es zu eskalieren. –

+0

Ob der Job nur dieses eine Ticket eskalieren oder alle, die bestimmte Kriterien erfüllen, eskalieren soll, ist eine Überlegung wert. Die Prozedur könnte die Ticket-ID als Parameter akzeptieren, wodurch die Notwendigkeit für spezielle Indizes beseitigt werden könnte, damit escalate_cases eine gute Leistung bringt. –

1

Schauen Sie sich das Material here

1

ich die Methode von Justin mit gutem Erfolg aufgeführt verwendet haben. Eine andere Methode, die gut funktioniert, ist die Verwendung einer Warteschlange mit verzögerter Zustellung. Dadurch haben Sie die Möglichkeit, ein externes Paging-Programm oder etwas in der Warteschlange auf Eskalationen warten zu lassen. Ich bin mit APEX nicht so vertraut, daher bin ich mir nicht sicher, ob das in diesem Zusammenhang eine gute Idee ist.

Verwandte Themen