2016-04-13 12 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 

ここで何が問題になっているのか分かりませんか? データベース:Oracle バージョン:12cdbms_schedulerジョブを停止できません

答えて

1

このエラーは、pl/SQLコードで未処理の例外によってスタックが解放されたために発生します。ほとんどの場合、スケジューラは不正なコードを含むプロシージャを実行しています。

まず最初に行うには、

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

は、その後、あなたのストアドプロシージャ(複数可)調査を開始し、いくつかの例外処理に追加し、ジョブを落としている(http://www.techonthenet.com/oracle/errors/ora06512.phpを参照してください)。

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; 

を次のようにこれは(おそらくいくつかのロギング/トレースに追加する必要があります、それは、ORA 06512.につながる可能性があなたの仕事で呼び出された場合は、いくつかのPL/SQLコードを持っているかもしれません。例えば

これを絞り込むために、あなたのPL/SQLにに、あなたが報告されたエラーメッセージに行番号も役立つかもしれない)

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 

これ以上の未処理の例外とそれを交換してください06512エラーが発生しなくなり、要求されたときにジョブが停止します。

は、ここでのOracle役立ちます https://docs.oracle.com/cd/A97630_01/appdev.920/a96624/07_errs.htm

ホープの例外処理のいくつかの良い情報です。

+0

概念証明を共有できますか? –

+0

私はいくつかのリンクと例で上記の答えを更新しました。 – Chris

+0

これは、同様の問題を抱えている人の例です。 http://stackoverflow.com/questions/20178030/dbms-scheduler-drop-job-only-if-exists – Chris

関連する問題