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