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

没有更多未处理的异常应该不会导致更多 ora 06512 错误,因此您的作业将在请求时停止。

这里有一些关于 oracle 异常处理的好信息 https://docs.oracle.com/cd/A97630_01/appdev.920/a96624/07_errs.htm

希望有帮助。

于 2016-04-13T13:33:09.260 回答