`
jordan_micle
  • 浏览: 240648 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

利用JOB定时执行存储过程

 
阅读更多

一、

首先还是得有个存储过程,假如名称是myproc。

 

二、

建立JOB,在 SQL行 下:

VARIABLE JOB_NO NUMBER;
begin
  dbms_job.submit(:JOB_NO,
                  'myproc;',
                  sysdate,
                  'sysdate+1/1440');
commit;
end;

其中JOB_NO是该作业的唯一标识,这里由系统生成。
存储过程名后面要接一个分号。
sysdate+1/1440表示每分钟执行一次。

如果想定在某个时间执行,例如隔N 天的M 点执行。

则为TRUNC(SYSDATE+N )+M *60/(24*60)。

 

三、

查看数据库中的JOB:

SELECT * FROM dba_jobs;

其中what 字段表示作业需要执行的存储过程名称。

 

四、

根据JOB ID删除JOB:

begin
	dbms_job.remove(jobid);
	commit;
end;

必须在命令行 下执行。

 

五、

根据JOB ID停止JOB:

 

 

SQL> execute dbms_job.broken(702, true);
PL/SQL procedure successfully completed
SQL> commit;
Commit complete

其中的702就是JOB ID,要commit。必须在命令行下执行。

 

 

 

 

 

 

分享到:
评论
4 楼 jordan_micle 2011-02-22  
aifine 写道
假如我需要停止这个JOB该怎么处理呢?

1、查看所有job;
select * from dba_jobs;
2、查看正在运行的job;
select * from dba_jobs_running;
3、根据sid查出对应的session;
select SID,SERIAL# from V$Session where SID='&SID';
4、kill对应的session;
alter system kill session '&SID,&SERIAL';
5、将job置为broken;
exec dbms_job.broken('&JOB',true);
6、sysdba用户权限删除job;
delete from dba_jobs where JOB='&JOB';
3 楼 aifine 2011-02-22  
假如我需要停止这个JOB该怎么处理呢?
2 楼 jordan_micle 2010-12-31  
韩海涛 写道
如果我想每天早上七点执行一次存储过程的话 如何写啊
还有就是 用作业 每天七点它就会自己执行么?


job的作用就是可以让指定的存储过程每天按时自动执行
每天的7点可以这样写:sysdate+1+7/24
1 楼 韩海涛 2010-12-30  
如果我想每天早上七点执行一次存储过程的话 如何写啊
还有就是 用作业 每天七点它就会自己执行么?

相关推荐

Global site tag (gtag.js) - Google Analytics