【问题标题】:DBMS_JOB.Broken in oracleDBMS_JOB.在 oracle 中损坏
【发布时间】:2022-11-23 11:35:57
【问题描述】:
无法找到 DBMS_JOB.Broken 命令的替代品来使作业中断。请帮助我。
我的代码中使用的命令是
dbms_job.broken(oracle_job_num, true);
对我们代码中使用的以下命令进行了更改。
DBMS_JOB.SUBMIT -> DBMS_SCHEDULER.CREATE_JOB
DBMS_JOB.REMOVE -> DBMS_SCHEDULER.DROP_JOB
【问题讨论】:
标签:
oracle
plsql
dbms-scheduler
dbms-job
【解决方案1】:
我认为在 dbms_scheduler 中没有特定的 api 可以将作业标记为已损坏,但有一个可以再次启用它:
DBMS_SCHEDULER.enable(name=>'test_job');
有一个 api 可以在作业将被禁用多少次失败后更改:
DBMS_SCHEDULER.set_attribute (name=>'test_job', attribute=>'max_failures',value=>3);
【解决方案2】:
使用DBMS_SCHEDULER.DISABLE('JOB_NAME') 和DBMS_SCHEDULER.ENABLE('JOBNAME') 而不是DBMS_JOB.BROKEN(ORACLE_JOB_NUM, TRUE) 和DBMS_JOB.BROKEN(ORACLE_JOB_NUM, FALSE)。 “中断”和“启用”功能并不完全相同,因为DBMS_JOBS 会在 16 次失败后自动中断作业,而 DBMS_SCHEDULER 不会。但是,如果您只是使用 BROKEN 手动禁用和启用,那么行为应该足够接近。