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

Я ищу скрипт, который отключает все задания. Прямо сейчас я выделяю их всех в Toad, нажимаю кнопку "Отключить" и затем фиксирую изменения. Должен быть способ сделать это в 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

Это отключит все включенные задания 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;
Другие вопросы по тегам