2013年11月9日 星期六

[Tips]關於DBA_JOBS及DBMS_JOBS.

在Oracle Database中,我們可以利用DBA/ALL/USER_JOBS來觀看我們排定的工作行程,然後利用DBMS_JOBS.來進行工作的安排和管理。

SELECT * FROM [dba_jobs/all_jobs/user_jobs];

  • DBA_JOBS:代表可以看到所有的Jobs,包含一些只有DBA才能看。
  • ALL_JOBS代表可以看到所有的連線到資料庫的USER的Jobs。
  • USER_JOBS:代表只能看到當前USER的Jobs。
  • DBA_JOBS_RUNNING:代表目前正在運作的Jobs。
1.查詢DBA_JOBS
SELECT * FROM dba_jobs;
  • LAST_DATE:上次工作執行成功的日期
  • NEXT_DATE:下次工作執行的日期
  • BROKEN:工作是否BORKEN
  • INTERVAL:例行工作執行的時間區間
  • FAILURE:嘗試失敗的次數,達16次會造成BORKEN
  • WHAT:執行的程序,也可以指定一個PL/SQL procedure
2.DBMS_JOB.
DBMS_JOBS. Subprograms
SUBMIT exec DBMS_JOB.SUBMIT(job, 'what', next_date, interval);
RUN exec DBMS_JOB.RUN(job, force)
BROKEN exec DBMS_JOB.BROKEN(job, broken, next_date)
CHANGE exec DBMS_JOB.CHANGE(job, 'what', next_date, interval,instance,force);
WHAT exec DBMS_JOB.WHAT(job, 'what');
NEXT_DATE exec DBMS_JOB.NEXT_DATE(job, next_date);
INTERVAL exec DBMS_JOB.INTERVAL(job, interval);
INSTANCE exec DBMS_JOB.INSTANCE(job, instance);
USER_EXPORT exec DBMS_JOB.USER_EXPORT(job, 'mycal');
REMOVE exec DBMS_JOB.REMOVE(job);


1)加入一個新的JOB
exec DBMS_JOB.ISUBMIT(1, 'insert into t values(sysdate);', sysdate, sysdate+1/24);

ISUBMIT可以指定job的id,如果是SUBMIT則必須使用變數帶入job的id

2)啟動JOB
exec DBMS_JOB.RUN(1);

3)修改Job的參數設定
exec DBMS_JOB.CHANGE(1,null,null,sysdate+1/1440);

通常沒有要更動的參數,我們可以利用null來表示

4)修改BROKEN的狀態
exec DBMS_JOB.BROKEN(1,true, sysdate);

@true表示BROKEN設定為Y,false表示為N

5)移除JOB
exec DBMS_JOB.REMOVE(1);