当前位置: 首页 > article >正文

oracle 定时任务dbms_job 增删改查

在Oracle数据库中,DBMS_JOB包曾经被广泛用于调度和管理数据库作业(jobs)。然而,从Oracle 11g Release 2开始,Oracle推荐使用更先进的DBMS_SCHEDULER包来替代DBMS_JOB,因为DBMS_SCHEDULER提供了更丰富的功能和更好的灵活性。不过,为了回答你的问题,这里将简要介绍如何使用DBMS_JOB进行增删改查操作。

1. 创建作业(增)

使用DBMS_JOB.SUBMIT过程来创建作业。你需要指定作业号(如果为NULL,Oracle会自动分配)、过程名称、开始时间、间隔时间以及参数(如果需要)。

DECLARE  
  job_no NUMBER;  
BEGIN  
  DBMS_JOB.SUBMIT(  
    job        => job_no,        -- 作业号,如果为NULL,则Oracle自动分配  
    what       => 'your_procedure;', -- 要执行的PL/SQL块或过程  
    next_date  => SYSDATE,      -- 作业下次执行的时间  
    interval   => 'SYSDATE+1'   -- 作业执行的频率(此处为每天)  
  );  
  COMMIT;  
  DBMS_OUTPUT.PUT_LINE('Job Number is: ' || job_no);  
END;  
/

注意:your_procedure应该是一个PL/SQL过程名,不包括括号,即使过程不需要参数。

2. 修改作业(改)

DBMS_JOB包本身没有直接修改作业(如更改执行频率或作业内容)的接口。你需要先删除旧作业,然后创建一个新的作业来替换它。

3. 删除作业(删)

使用DBMS_JOB.REMOVE过程来删除作业。

BEGIN  
  DBMS_JOB.REMOVE(job_no);  -- job_no 是你想要删除的作业的编号  
  COMMIT;  
END;  
/

4. 查询作业(查)

DBMS_JOB没有直接提供查询作业信息的函数,但你可以查询USER_JOBSDBA_JOBSALL_JOBS视图来获取作业信息。

SELECT job, log_user, priv_user, what, next_date, interval  
FROM user_jobs;

或者,如果你有足够的权限,可以查询DBA_JOBSALL_JOBS视图来获取更多信息。

替代方案:DBMS_SCHEDULER

由于DBMS_SCHEDULER提供了更强大的功能,包括更灵活的调度、更详细的日志记录、更强大的异常处理机制等,强烈建议在新的项目中使用DBMS_SCHEDULER来替代DBMS_JOB

例如,使用DBMS_SCHEDULER创建作业的语法大致如下:

BEGIN  
  DBMS_SCHEDULER.CREATE_JOB (  
    job_name        => 'my_new_job',  
    job_type        => 'PLSQL_BLOCK',  
    job_action      => 'BEGIN your_procedure; END;',  
    start_date      => SYSTIMESTAMP,  
    repeat_interval => 'FREQ=DAILY; BYHOUR=23; BYMINUTE=0; BYSECOND=0',  
    enabled         => TRUE,  
    comments        => 'My daily job');  
END;  
/

这将创建一个每天午夜执行的作业。


http://www.kler.cn/a/290499.html

相关文章:

  • Android OpenGL ES详解——纹理:纹理过滤GL_NEAREST和GL_LINEAR的区别
  • 【C++】详解RAII思想与智能指针
  • [SWPUCTF 2022 新生赛]Power! 反序列化详细题解
  • MySQL 中的索引下推功能
  • R语言机器学习与临床预测模型69--机器学习模型解释利器:SHAP
  • 【C/C++】CreateThread 与 _beginthreadex, 应该使用哪一个?为什么?
  • slice
  • 一篇文章深入了解Oracle常用命令
  • xxe漏洞
  • 小型集群分析
  • 【IPV6从入门到起飞】3-域名解析动态IPV6(阿里云)
  • 学习大数据DAY49 考后练习题
  • python学习8:dict字典的定义,操作和方法,跟json有什么区别?
  • 通过查找真实IP bypass WAF
  • 容器化你的应用:使用 Docker 入门指南
  • window 10使用wsl装docker踩坑
  • CCNA课笔记
  • 【NO.17】LeetCode经典150题-13. 罗马数字转整数
  • 装机必看!内存条应该怎么插?各种内存条插法详解
  • Seataf分布式事务的使用
  • 坐牢第三十四天(c++)
  • WordPress自适应美图网站整站打包源码
  • Docker镜像中的源替换为国内源
  • C/C++:函数指针
  • SpringBoot3集成Spring Authorization Server实现SSO单点登录
  • uniapp小程序实现横屏手写签名