Скрипт для отключения всех заданий в Oracle (пакет заданий СУБД)?

Я ищу скрипт, который отключает все рабочие места. Прямо сейчас я выделяю их все в жабе, нажимаю кнопку "отключить", а затем фиксирую изменения. Должен быть способ сделать это в PL/SQL.

3 ответов


если вы хотите запретить выполнение всех заданий, вы можете изменить параметр инициализации 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_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

это отключит все задания СУБД, которые включены.

вы можете изменить запрос, чтобы включить все отключенные тоже.