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 に答える