【发布时间】:2011-07-31 23:01:08
【问题描述】:
我正在寻找一个禁用所有作业的脚本。现在我在 Toad 中突出显示它们,单击脱机按钮,然后提交更改。在 PL/SQL 中必须有办法做到这一点。
【问题讨论】:
标签: oracle plsql oracle10g dbms-job
我正在寻找一个禁用所有作业的脚本。现在我在 Toad 中突出显示它们,单击脱机按钮,然后提交更改。在 PL/SQL 中必须有办法做到这一点。
【问题讨论】:
标签: oracle plsql oracle10g dbms-job
如果要阻止所有作业运行,可以更改初始化参数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 分钟内运行。
【讨论】:
dbms_ijob。
dbms_job 现已过时,dbms_scheduler 是它的替代品。
== 对于 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');
【讨论】:
请运行以下查询。
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 作业。
您也可以修改查询以启用所有禁用的。
【讨论】:
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;
【讨论】: