7

我正在寻找一个禁用所有作业的脚本。现在我在 Toad 中突出显示它们,单击脱机按钮,然后提交更改。在 PL/SQL 中必须有一种方法可以做到这一点。

4

4 回答 4

14

如果要阻止所有作业运行,可以更改初始化参数JOB_QUEUE_PROCESSES。如果将其设置为 0,Oracle 将不会运行任何使用DBMS_JOB.

您还可以标记已损坏的工作

BEGIN
  FOR x IN (SELECT * FROM user_jobs)
  LOOP
    dbms_job.broken( x.job, true );
  END LOOP;
END;

这将导致它们无法运行(但将允许在该点之后创建的任何作业正常运行)。解开工作

BEGIN
  FOR x IN (SELECT * FROM user_jobs)
  LOOP
    dbms_job.broken( x.job, false, SYSDATE + interval '1' minute);
  END LOOP;
END;

将所有作业设置为在 1 分钟内运行。

于 2011-04-07T19:01:02.990 回答
8

== 对于 dbms_job 作业:

alter system set job_queue_processes=0 scope=both;

对于某些维护可能会更好/您通常可能希望将一些工作脱机,并且在您完成维护时不希望将它们置于联机状态。

== 对于 dbms_scheduler 作业:

exec dbms_scheduler.set_scheduler_attribute('SCHEDULER_DISABLED','TRUE');

维护完成后:

exec dbms_scheduler.set_scheduler_attribute('SCHEDULER_DISABLED','FALSE');
于 2012-10-13T23:19:40.997 回答
3

请运行以下查询。

set head off
spool job_disable.sql
select 'execute dbms_scheduler.disable('||''''||owner||'.'||job_name||''''||');' from dba_scheduler_jobs where enabled='TRUE';
spool off;
@job_disable.sql

这将禁用所有已启用的 dbms 作业。

您也可以修改查询以启用所有禁用的。

于 2015-10-19T12:37:51.767 回答
1
DECLARE
    CURSOR selection
    IS SELECT job_name FROM dba_scheduler_jobs WHERE owner = '[username]';
    --or make your own selection here
    
BEGIN
    FOR record IN selection
    LOOP
        dbms_scheduler.disable(record.job_name); 
    END LOOP;
END;
于 2020-09-16T11:47:08.753 回答