三、查看相关job信息
1、相关视图
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行job相关信息
2、查看相关信息
SQL>SELECT JOB, NEXT_DATE, NEXT_SEC, FAILURES, BROKEN
SQL>FROM DBA_JOBS;
JOB NEXT_DATE NEXT_SEC FAILURES B
------- --------- -------- -------- -
9125 01-JUN-01 00:00:00 4 N
14144 24-OCT-01 16:35:35 0 N
9127 01-JUN-01 00:00:00 16 Y
3 rows selected.
正在运行的JOB相关信息
SELECT SID, r.JOB, LOG_USER, r.THIS_DATE, r.THIS_SEC
FROM DBA_JOBS_RUNNING r, DBA_JOBS j
WHERE r.JOB = j.JOB;
SID JOB LOG_USER THIS_DATE THIS_SEC
----- ---------- ------------- --------- --------
12 14144 HR 24-OCT-94 17:21:24
25 8536 QS 24-OCT-94 16:45:12
2 rows selected.
JOB QUEUE LOCK相关信息
SELECT SID, TYPE, ID1, ID2
FROM V$LOCK
WHERE TYPE = 'JQ';
SID TY ID1 ID2
--------- -- --------- ---------
12 JQ 0 14144
1 row selected.
四、简单例子
创建测试表
SQL> create table myjob(a date);
表已创建。
创建一个自定义过程
SQL> create or replace Procedure prc_myjob as
2 begin
3 insert into myjob values(sysdate);
4 end;
5 /
过程已创建。
创建JOB
SQL> variable job1 number;
SQL> begin
2 dbms_job.submit(:job1,'prc_myjob;',sysdate,'sysdate+1/1440');--每天1440分钟,即一分钟运行test过程一次
3 end;
4 /
PL/SQL 过程已成功完成。
运行JOB
SQL> begin
2 dbms_job.run(:job1);
3 end;
4 /
PL/SQL 过程已成功完成。
SQL> select to_char(a,'yyyy/mm/dd hh24:mi:ss') 时间 from TEST;
时间
-------------------
2001/01/07 23:51:21
2001/01/07 23:52:22
2001/01/07 23:53:24
删除JOB
SQL> begin
2 dbms_job.remove(:job1);--如果知道job号,可以直接使用,如dbms_job.remove(1);
3 end;
4 /
PL/SQL 过程已成功完成。
上面的是每间隔多久执行一次指定的job,那么如何设置定时定点job呢,如设置2月5号晚8点执行?
创建JOB
SQL> variable job1 number;
SQL> begin
2 dbms_job.submit(:job1,'prc_myjob;',sysdate,'ADD_MONTHS(TRUNC(SYSDATE,''MM''),1)+4+20/24');
3 end;
4 /
PL/SQL 过程已成功完成。
运行JOB
SQL> begin
2 dbms_job.run(:job1);
3 end;
4 /
PL/SQL 过程已成功完成。
上面设置job的时候要考虑你执行的日期。
责任编辑:小草