2016-04-13 91 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 版本:12c無法停止dbms_scheduler作業

回答

1

此錯誤是由pl/SQL代碼中未處理的異常解除堆棧導致的。調度程序很可能正在執行一個過程,其中包含一些錯誤的代碼。 (見http://www.techonthenet.com/oracle/errors/ora06512.php

做的第一件事就是放下工作

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

然後開始調查你的存儲過程(S),並添加一些異常處理。

例如,你可能有一些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 

沒有更多未處理的異常,請更換s應該不會導致更多的錯誤,因此當您的請求時您的工作將停止。

下面是在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