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 バージョン: 12c

4

1 に答える 1

1

このエラーは、pl/SQL コードの未処理の例外によってスタックがアンワインドされたことが原因で発生します。ほとんどの場合、スケジューラは不正なコードを含むプロシージャを実行しています。( http://www.techonthenet.com/oracle/errors/ora06512.phpを参照)

まずは仕事を辞める

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

次に、ストアド プロシージャの調査を開始し、いくつかの例外処理を追加します。

たとえば、次のような 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;
End;

これがジョブによって呼び出された場合、ora 06512 が発生する可能性があります (おそらく、これを絞り込むために、いくつかのロギング/トレースを 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 エラーが発生することはなくなるため、要求時にジョブが停止します。

オラクルの例外処理に関する良い情報があり ます https://docs.oracle.com/cd/A97630_01/appdev.920/a96624/07_errs.htm

それが役立つことを願っています。

于 2016-04-13T13:33:09.260 に答える