Скрипт для отключения всех заданий в 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;