首页 文章

无法停止dbms_scheduler作业

提问于
浏览
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

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

    希望有所帮助 .

相关问题