oracle scheduler任務

sky850623發表於2014-03-19
一、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部落格 ” ,連結:http://blog.itpub.net/26937943/viewspace-1125313/,如需轉載,請註明出處,否則將追究法律責任。

相關文章