如何创建oracle任务,如何创建Oracle定时任务

一、在PLSQL中创建表:

create table HWQY.TEST

(

CARNO VARCHAR2(30),

CARINFOID NUMBER

)

create table HWQY.TEST

(

CARNO VARCHAR2(30),

CARINFOID NUMBER

)

二、在PLSQL中创建存储过程:

create or replace procedure pro_test

AS

carinfo_id number;

BEGIN

select s_CarInfoID.nextval into carinfo_id

from dual;

insert into test(test.carno,test.carinfoid) values(carinfo_id,'123');

commit;

end pro_test;

create or replace procedure pro_test

AS

carinfo_id number;

BEGIN

select s_CarInfoID.nextval into carinfo_id

from dual;

insert into test(test.carno,test.carinfoid) values(carinfo_id,'123');

commit;

end pro_test;

三、在SQL命令窗口中启动任务:

在SQL>后执行

VARIABLE jobno number;

begin

DBMS_JOB.SUBMIT(:jobno,

'pro_test;',

SYSDATE,'sysdate+1/24/12');

commit;

end;

VARIABLE jobno number;

begin

DBMS_JOB.SUBMIT(:jobno,

'pro_test;',

SYSDATE,'sysdate+1/24/12');

commit;

end;

四、跟踪任务的情况(查看任务队列):

SQL> select job,next_date,next_sec,failures,broken from user_jobs;

JOB NEXT_DATE NEXT_SEC FAILURES BROKEN

---------- ----------- ---------------- ---------- ------

1 2008-2-22 ?01:00:00 0 N

SQL> select job,next_date,next_sec,failures,broken from user_jobs;

JOB NEXT_DATE NEXT_SEC FAILURES BROKEN

---------- ----------- ---------------- ---------- ------

1 2008-2-22 ?01:00:00 0 N

说明有一个任务存在了。

执行select * from test t查看定时任务的结果。可以看出定时任务是正常执行了的。

五、停止已经启动的定时任务:

先执行select job,next_date,next_sec,failures,broken from

user_jobs;

以查看定时任务的job号。

在SQL>中执行下面的语句停止一个已经启动的定时任务:

begin

dbms_job.remove(1);

commit;

end;

begin

dbms_job.remove(1);

commit;

end;

表示停止job为1的任务。

执行后显示如下:

PL/SQL procedure successfully completed

PL/SQL procedure successfully completed

六、查看进程数:

show parameter job_queue_processes;

show parameter job_queue_processes;

必须>0, 否则执行下面的命令修改:

alter system setjob_queue_processes=5;

alter system set job_queue_processes=5;

七、再创建一个任务(每5分钟执行一次):

variable jobno number;

begin

dbms_job.submit(:jobno, 'pro_test;',

sysdate,'sysdate+1/24/12');

commit;

end;

variable jobno number;

begin

dbms_job.submit(:jobno, 'pro_test;',

sysdate,'sysdate+1/24/12');

commit;

end;

建立一个定时任务后,在PLSQL中查看JOB,它的sql语句类似的是如下:

begin

sys.dbms_job.submit(job=> :jobno,

what=> 'pro_test;',

next_date=> to_date('21-02-2008 17:37:26', 'dd-mm-yyyy hh24:mi:ss'),

interval=> 'sysdate+1/24/12');

commit;

end;

begin

sys.dbms_job.submit(job => :jobno,

what => 'pro_test;',

next_date => to_date('21-02-2008 17:37:26', 'dd-mm-yyyy hh24:mi:ss'),

interval => 'sysdate+1/24/12');

commit;

end;

所以,创建一个任务的完整的格式是:

variable jobno number;

begin

sys.dbms_job.submit(job=> :jobno,

what=> 'pro_test;',

next_date=> to_date('21-02-2008 17:37:26', 'dd-mm-yyyy hh24:mi:ss'),

interval=> 'sysdate+1/24/12');

commit;

end;

variable jobno number;

begin

sys.dbms_job.submit(job => :jobno,

what => 'pro_test;',

next_date => to_date('21-02-2008 17:37:26', 'dd-mm-yyyy hh24:mi:ss'),

interval => 'sysdate+1/24/12');

commit;

end;

--系统会自动分配一个任务号jobno。

八、 执行作业查看

select job,next_date,next_sec,failures,broken from user_jobs;

select job,next_date,next_sec,failures,broken from user_jobs;

结果:

JOB NEXT_DATE NEXT_SEC FAILURES BROKEN

1 1 2008-2-22 AM 01:00:00 01:00:00 0 N

2 2 2008-2-21 PM 05:42:45 17:42:45 0 N

3 3 2008-2-21 PM 05:42:45 17:42:45 0 N

九、创建

job的格式:

DBMS_JOB.SUBMIT(:jobno,//job号

'your_procedure;',//要执行的过程

trunc(sysdate)+1/24,//下次执行时间

'trunc(sysdate)+1/24+1'//每次间隔时间

);

DBMS_JOB.SUBMIT(:jobno,//job号

'your_procedure;',//要执行的过程

trunc(sysdate)+1/24,//下次执行时间

'trunc(sysdate)+1/24+1'//每次间隔时间

);

删除job:dbms_job.remove(jobno);

修改要执行的操作:job:dbms_job.what(jobno,what);

修改下次执行时间:dbms_job.next_date(job,next_date);

修改间隔时间:dbms_job.interval(job,interval);

停止job:dbms.broken(job,broken,nextdate);

启动job:dbms_job.run(jobno);

例子:

VARIABLE jobno number;

begin

DBMS_JOB.SUBMIT(:jobno,

'Procdemo;',//Procdemo为过程名称

SYSDATE, 'SYSDATE + 1/720');

commit;

end;

VARIABLE jobno number;

begin

DBMS_JOB.SUBMIT(:jobno,

'Procdemo;',//Procdemo为过程名称

SYSDATE, 'SYSDATE + 1/720');

commit;

end;

十、执行作业必须设置的参数

-----修改job_queue_processes的值(保证其不为0否则JOB不自动运行)

可通过select * from v$parameter;查看其值;

方法1、startup pfile='C:\oracle\ora90\database\initorcl.ora';

需要修改initorcl.ora文件的job_queue_processes参数,然后重新启动数据库以后才能生效

方法2、alter system set job_queue_processes=10

不需要重新启动数据库就能生效,系统自动修改init.ora文件