關於dbms_job系統包對job的管理

suifeng2316發表於2013-03-13
--檢視job執行狀態
select * from dba_jobs ;
select * from dba_jobs_running ;
--*********************************************************
LOG_USER            提交任務的使用者
PRIV_USER           賦予任務許可權的使用者
SCHEMA_USER     對任務作語法分析的預設使用者模式
--*********************************************************
--建立任務
variable job number;
begin
dbms_job.submit(job => :job, 
                what => 'test_job;', 
                next_date => sysdate, 
                interval => 'sysdate+1/1440');
                commit;
end;
--刪除job
begin
dbms_job.remove(30649);
end;
--調整job狀態
begin
dbms_job.broken(3594,false,sysdate+3/24);
end;
注意如果不加第三個引數,預設為立即執行
--調整間隔
begin
dbms_job.interval(job => 23,
                  interval => 'sysdate+1/1440');
end;
--匯出使用者的定義語句
set serveroutput on ;
declare
        job_body varchar2(32767);
    begin
        dbms_job.user_export(1,job_body);
        dbms_output.put_line(job_body);
    end;
--如果要停止正在使用job,可以先使用dbms_job.broken過程,將job調整為broken狀態,然後將job對應的session kill掉。
begin
  for c in (select * from dba_jobs ) LOOP
        dbms_output.put_line(c.job||'  '||c.what);
   -- dbms_job.broken(c.job);
  end loop ;
  commit;
end;
 select 'alter system kill session ''' || a.sid || ',' || a.serial# ||   ''' ;'
   from v$session a, dba_jobs_running b
  where a.sid = b.sid
    and a.status = 'ACTIVE'
    and b.job like '39%'
   order by job
--管理其他使用者job, 可以使用dbms_ijob
declare
  cursor c is
    select *
      from dba_jobs
     where log_user = 'xxxx'
       and schema_user = 'xxxx';
  row_job dba_jobs%rowtype;
begin
  open c;
  loop
    fetch c
      into row_job;
    exit when c%notfound;
    dbms_ijob.broken(row_job.job, true);
    commit;
  end loop;
  close c;
end;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23073818/viewspace-756026/,如需轉載,請註明出處,否則將追究法律責任。

相關文章