2016-04-13 5 views
1
SQL> Exec Dbms_Scheduler.stop_job('US_ALERT',true); 
begin Dbms_Scheduler.stop_job('US_ALERT',true); end; 
ORA-27466: internal scheduler error: 1870 
ORA-06512: at "SYS.DBMS_ISCHED", line 227 
ORA-06512: at "SYS.DBMS_SCHEDULER", line 674 
ORA-06512: at line 1 

Hat jemand eine Ahnung, was hier falsch läuft? Datenbank: Oracle Version: 12cNicht in der Lage zu stoppen dbms_scheduler Job

Antwort

1

Dieser Fehler wird dadurch verursacht, dass der Stapel durch nicht behandelte Ausnahmen im pl/SQL-Code abgewickelt wird. Höchstwahrscheinlich führt der Scheduler eine Prozedur mit etwas fehlerhaftem Code aus. (Siehe http://www.techonthenet.com/oracle/errors/ora06512.php)

Das erste, was ist es, die Arbeit zu tun Drop

BEGIN 
    DBMS_SCHEDULER.DROP_JOB('myjob1'); 
END; 
/

Dann starten Sie Ihre gespeicherte Prozedur (en) und fügen Sie in einigen Ausnahmebehandlung zu untersuchen.

Zum Beispiel Sie könnten einige PL/SQL-Code haben als

DECLARE pe_ratio NUMBER(3,1); 
BEGIN 
SELECT price/earnings INTO pe_ratio FROM stocks WHERE symbol = 'XYZ'; -- might cause division-by-zero error 
INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio); COMMIT; 
End; 

folgt Wenn dies von Ihrem Job genannt wurde es in einem ora führen könnte 06512. (Sie wahrscheinlich müssen in einigen Protokollierung/Spuren hinzufügen in auf Ihre PL/SQL die Zeilennummern in den Fehlermeldungen verengen diese nach unten, Sie berichtet wurden, können auch dazu beitragen,

es) Ersetzen mit

DECLARE pe_ratio NUMBER(3,1); 
BEGIN 
SELECT price/earnings INTO pe_ratio FROM stocks WHERE symbol = 'XYZ'; -- might cause division-by-zero error 
INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio); 
COMMIT; 
EXCEPTION -- exception handlers begin 
WHEN ZERO_DIVIDE THEN -- handles 'division by zero' error 
INSERT INTO stats (symbol, ratio) VALUES ('XYZ', NULL); 
COMMIT; ... 
WHEN OTHERS THEN -- handles all other errors 
ROLLBACK; 
END; -- exception handlers and block end here 

nicht mehr unbehandelt Ausnahme s sollte nicht mehr zu ora 06512 Fehlern führen und daher wird Ihr Auftrag auf Anforderung gestoppt.

Hier einige gute Informationen über die Ausnahmebehandlung in oracle https://docs.oracle.com/cd/A97630_01/appdev.920/a96624/07_errs.htm

Hoffnung, das hilft.

+0

Können Sie einige Proof of Concept teilen? –

+0

Ich habe die obige Antwort mit einigen Links und einem Beispiel aktualisiert. – Chris

+0

Hier ist ein Beispiel für jemanden mit einem ähnlichen Problem. http://stackoverflow.com/questions/20178030/dbms-scheduler-drop-job-only-if-exists – Chris