此错误是由于 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
希望对您有所帮助。