创建DBMS_Job

本文介绍了如何在Oracle数据库中创建存储过程以删除7天前的数据,并展示了如何使用DBMS_JOB创建定时任务,详细说明了不同类型的定时执行间隔设置方法,包括每分钟、每天、每周、每月、每季度和每年执行的示例。

1、首先创建一个存储过程,procedure

create or replace procedure 存储过程名 is --删除7天的数据
begin
  delete from t_table t
   where t.created_time < sysdate - 7;
end 存储过程名;

2、创建Dbms_job

  • 在对象浏览器中找到DBMS_Jobs,右键new弹出如下界面DBMS_Jobs

job:一般自动生成,不管;
what:存储过程,注意存储过程后面加;
next date 可以不管;
interval:
(1)每分钟执行
Interval => TRUNC(sysdate,‘mi’) + 1/ (24*60) –或sysdate+1/1440
(2)每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate+ 1) +1/ (24)
(3)每周定时执行
例如:每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,‘星期一’))+1/24
(4)每月定时执行
例如:每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
(5)每季度定时执行
例如每季度的第一天凌晨1点执行
TRUNC(ADD_MONTHS(SYSDATE,3),‘Q’) + 1/24
(6)每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval => ADD_MONTHS(trunc(sysdate,‘yyyy’),6)+1/24
(7)每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,‘yyyy’),12)+1/24

也可以直接执行如下程序

  • 程序执行如下
begin
  sys.dbms_job.submit(job => :job,
                       -- 注意名字后面必须有“;”
                      what => '存储过程名;',
                      -- 下一次注意格式 日月年
                      next_date => to_date('21-01-2024 16:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                      -- 执行间隔 每天16点执行
                      interval => 'TRUNC(sysdate+ 1) +16/ (24)');
  commit;
end;
### 使用DBMS_JOB创建和管理Oracle数据库中的定时任务 在Oracle数据库中,`DBMS_JOB`包允许用户安排和管理数据库作业。尽管从Oracle 10g Release 2开始推荐使用`DBMS_SCHEDULER`[^2],但`DBMS_JOB`仍然广泛用于旧系统中。以下是关于如何使用`DBMS_JOB`创建和管理定时任务的具体示例代码和说明。 #### 1. 创建定时任务 `DBMS_JOB.SUBMIT`过程用于提交一个新的任务。以下是一个示例,展示如何创建一个定时任务以执行存储过程。 ```sql DECLARE job_number NUMBER; BEGIN DBMS_JOB.SUBMIT( job => job_number, what => 'my_procedure;', next_date => SYSDATE + INTERVAL '1' MINUTE, -- 下次执行时间 interval => 'SYSDATE + INTERVAL ''1'' HOUR' -- 每小时执行一次 ); COMMIT; -- 提交事务以激活任务 END; / ``` 上述代码创建了一个每小时运行一次的任务,并且首次执行时间为当前时间加1分钟[^3]。 #### 2. 修改定时任务 可以通过`DBMS_JOB.BROKEN`或`DBMS_JOB.INTERVAL`来修改任务的状态或间隔时间。 - **设置任务为无效(停止任务)**: ```sql BEGIN DBMS_JOB.BROKEN(job => 1, broken => TRUE); -- 将任务ID为1的任务设为无效 COMMIT; END; / ``` - **修改任务的执行间隔**: ```sql BEGIN DBMS_JOB.INTERVAL(job => 1, interval => 'SYSDATE + INTERVAL ''2'' HOUR'); -- 修改任务ID为1的任务为每两小时执行一次 COMMIT; END; / ``` #### 3. 运行定时任务 如果需要立即运行某个任务,可以使用`DBMS_JOB.RUN`。 ```sql BEGIN DBMS_JOB.RUN(job => 1); -- 立即运行任务ID为1的任务 END; / ``` #### 4. 删除定时任务 使用`DBMS_JOB.REMOVE`可以删除指定的任务。 ```sql BEGIN DBMS_JOB.REMOVE(job => 1); -- 删除任务ID为1的任务 COMMIT; END; / ``` #### 5. 查询定时任务状态 可以通过查询`USER_JOBS`视图来查看当前用户的任务状态。 ```sql SELECT job, log_user, last_date, next_date, broken, failures, what FROM USER_JOBS; ``` ### 注意事项 - `DBMS_JOB`的功能相对有限,建议在新开发中优先考虑使用`DBMS_SCHEDULER`[^2]。 - 提交任务后必须执行`COMMIT`操作,否则任务不会生效[^3]。 - 如果任务的`BROKEN`标志被设置为`TRUE`,则该任务将不再自动执行[^2]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值