一、job有两个组件scheduler和programs
1.把programs代码和scheduler放在job参数中,不用组件化
a.创建一个log表用于测试
create table log(
user_name varchar2(10),
user_date date)
b.创建存储过程pro_insert_t 每次执行该过程都会向T表插入一条记录
create or replace procedure pro_insert_t as
begin
insert into log values (user,sysdate);
end;
c.创建一个job
begin
DBMS_SCHEDULER.create_job(
job_name => 'exec_procedure',
job_type => 'STORED_PROCEDURE', --执行存储过程
job_action => 'pro_insert_t', --存储过程名
start_date => sysdate,
repeat_interval => 'FREQ=minutely;INTERVAL=1;', --每三分钟执行一次,重复间隔
comments => 'My first job');
end;
d.启动job
exec dbms_scheduler.enable('exec_procedure');
e.查看job运行情况
SQL> select log_id,log_date,job_name,status from user_scheduler_job_run_details;
LOG_ID LOG_DATE JOB_NAME STATUS
---------- --------------------------------------------------------------------------- -------------------- ----------------
7243 19-MAR-14 08.48.22.156000 PM +08:00 EXEC_PROCEDURE SUCCEEDED
SQL> select *from log;
USER_NAME USER_DATE
---------- ------------
SCOTT 19-MAR-14
f.禁用job
SQL> exec dbms_scheduler.disable('exec_procedure');
PL/SQL procedure successfully completed.
g.删除job
begin
dbms_scheduler.drop_job('exec_proc');
end;
/
2.把scheduler和名字和programs的名字放在job参数中
每隔1分钟添加一条数据
1)创建一个表
create table log(
user_name varchar2(10),
user_date date)
2)创建一个过程
create or replace procedure pro_insert_t as
begin
insert into log values (user,sysdate);
end;
3)grant create job to scott;
4)创建program
begin
dbms_scheduler.create_program(
program_name=>'prog1',
program_action=>'scott.pro_insert_t',
program_type=>'STORED_PROCEDURE',
enabled=>true,
comments=>'first program');
end;
SQL> select program_name,program_type,program_action from user_scheduler_programs;
PROGRAM_NAME PROGRAM_TYPE PROGRAM_ACTION
------------------------------ ---------------- ---------------------------------------
PROG1 STORED_PROCEDURE scott.pro_insert_t
5)创建scheduler
begin
dbms_scheduler.create_schedule(
schedule_name=>'scheduler1',
start_date=>systimestamp,
end_date=>systimestamp+1,
repeat_interval=>'freq=minutely;interval=1',
comments=>'every minutely');
end;
SQL> select schedule_name,schedule_type,start_date from user_scheduler_schedules;
SCHEDULE_NAME SCHEDULE START_DATE
------------------------------ -------- -----------------------------------------------------
SCHEDULER1 CALENDAR 19-MAR-14 09.07.21.656000 PM +08:00
6)创建job
begin
dbms_scheduler.create_job
(
job_name=>'job1',
program_name=>'scott.prog1',
schedule_name=>'scott.scheduler1'
);
end;
7)启用job
SQL> select job_name,enabled from user_scheduler_jobs;
JOB_NAME ENABL
-------------------- -----
JOB1 FALSE
EXEC_PROCEDURE FALSE
begin
dbms_scheduler.enable('job1');
end;
8)监控job运行状况(user_scheduler_job_run_details)
SQL> select log_id,log_date,job_name,status from user_scheduler_job_run_details;
LOG_ID LOG_DATE JOB_NAME STATUS
---------- --------------------------------------------------------------------------- -------------------- ----------------
7243 19-MAR-14 08.48.22.156000 PM +08:00 EXEC_PROCEDURE SUCCEEDED
7244 19-MAR-14 08.51.22.125000 PM +08:00 EXEC_PROCEDURE SUCCEEDED
7245 19-MAR-14 09.15.21.093000 PM +08:00 JOB1 SUCCEEDED
7246 19-MAR-14 09.16.21.109000 PM +08:00 JOB1 SUCCEEDED
SQL> select * from log;
USER_NAME USER_DATE
---------- ------------
SCOTT 19-MAR-14
SCOTT 19-MAR-14
SCOTT 19-MAR-14
SCOTT 19-MAR-14
9)停用、删除job
dbms_scheduler.disable('job1');
dbms_scheduler.drop_job('job1');
dbms_scheduler.drop_scheduler('SCHEDULER1');
dbms_scheduler.drop_program('PROG1');
二.查看所有job
dba_scheduler_job
三.监控job运行情况
dba_scheduler_job_run_details
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26937943/viewspace-1125313/
,如需转载,请注明出处,否则将追究法律责任。