【问题标题】:Not able to stop dbms_scheduler job无法停止 dbms_scheduler 作业
【发布时间】:2016-08-04 12:46:14
【问题描述】:
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

有人知道这里出了什么问题吗? 数据库:甲骨文 版本:12c

【问题讨论】:

    标签: oracle plsql dbms-scheduler


    【解决方案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

    希望对您有所帮助。

    【讨论】:

    猜你喜欢
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2012-01-20
    • 2018-02-01
    • 2021-06-18
    • 1970-01-01
    • 2014-11-24
    相关资源
    最近更新 更多