oracle创建job

一、基本语法

与mysql的event事件类似,用来创建数据库的定时任务。

DBMS_JOB.SUBMIT( 
   job       OUT    BINARY_INTEGER,
   what      IN     VARCHAR2, 
   NEXT_DATE IN     DATE DEFAULTSYSDATE, 
   interval  IN     VARCHAR2 DEFAULT 'NULL',
   no_parse  IN     BOOLEAN DEFAULT FALSE,
   instance  IN     BINARY_INTEGER DEFAULT ANY_INSTANCE,
   force     IN     BOOLEAN DEFAULT FALSE);
  • job参数是由Submit()过程返回的整型
  • what表示这个job执行的内容,可以是存储过程或者sql代码块
  • next_date表示执行这个job的开始时间
  • interval表示重复执行的时间间隔
  • no_parse表示这个job什么时候进行语法分析,true表示第一次执行时进行语法分析,false表示创建成功即进行语法分析
  • instance、force用的很少。当force为true时,所有实例都能执行该job;当force为false时,只有指定实例能执行该job。

使用示例:

declare
  tm_job number;
begin
  sys.dbms_job.submit(:tm_job,
                      'prc_job_test;',
                      sysdate,
                      'sysdate+1/(24*60)');--每隔1分钟执行一次
end;

二、基本使用方法

1、oracle 10g默认允许的job队列为10个,可以通过命令查看
show parameter job_queue_processes;
这里写图片描述
可以通过alert命令修改这个值
alter system set job_queue_processes=11 scope=both;
这里写图片描述

scope作用域介绍:
Oracle 里面有个叫做spfile的东西,就是动态参数文件,里面设置了Oracle 的各种参数。所谓的动态,就是说你可以在不关闭数据库的情况下,更改数据库参数,记录在spfile里面。更改参数的时候,有3种scope选项。

  • scope=spfile 仅仅更改spfile里面的记载,不更改内存,也就是不立即生效,而是等下次数据库启动生效。
  • scope=memory 仅仅更改内存,不改spfile。也就是下次启动就失效了。
  • scope=both 内存和spfile都更改。默认为both。

2、对job进行修改
与创建类似,只不过第一个参数是传入并非返回。

BEGIN
   DBMS_JOB.CHANGE(14144, null, null, 'sysdate+3');
   COMMIT;
END; 

修改其他参数类似,例如修改INTERVAL

DBMS_JOB.INTERVAL ( 
   job       IN  BINARY_INTEGER,
   interval  IN  VARCHAR2);

2、删除job

DBMS_JOB.REMOVE ( 
   job       IN  BINARY_INTEGER );

3、常用定时
TRUNC()函数常用来截取日期和数值(不进行四舍五入)。

select trunc(sysdate,'yyyy') from dual --2016-01-01 当年第一天
select trunc(sysdate,'dd') from dual --2016-09-05 当天
select trunc(sysdate, 'hh') from dual --2016-09-05 17:00:00 精确到小时 
select trunc(sysdate, 'mi') from dual --2016-09-05 17:35:00 精确到分
select trunc(123.458,-1) from dual --120
select trunc(123.458,1) from dual --123.4

在job中的灵活时间设定

TRUNC(sysdate,'mi')+1/(24*60) --每分钟执行
TRUNC(sysdate+1) --每天凌晨0点执行
TRUNC(sysdate+1)+1/24 --每天凌晨1点
TRUNC(SYSDATE+1)+(8*60+30)/(24*60) --每天早上8点30分执行
TRUNC(next_day(sysdate,1))+2/24 --每周一凌晨2点执行
TRUNC(LAST_DAY(SYSDATE)+1) --每月1日凌晨0点执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值