首页 > 数据库 >Oracle DBMS_JOB包的使用

Oracle DBMS_JOB包的使用

时间:2023-07-31 10:01:37浏览次数:43  
标签:BINARY DBMS 存储 JOB job 实例 Oracle

DBMS_JOB包介绍

DBMS_JOB程序包主要是调度和管理作业队列中的作业。换句话说,其实就是用来管理定时任务的程序包。

Oracle推荐使用DBMS_SCHEDULER包来替代DBMS_JOB包。

DBMS_JOB包中的存储过程使用

DBMS_JOB程序包中主要有以下存储过程:

  • BROKEN
  • CHANGE
  • INSTANCE
  • INTERVAL
  • NEXT_DATE
  • REMOVE
  • RUN
  • SUBMIT
  • USER_EXPORT
  • WHAT

接下来具体说明这些存储过程的使用。

BROKEN

broken存储过程永久的禁用job的执行,就类似于冻结这个job。禁用之后,数据库中还会保留它,但即使满足条件也不会再调用。

语法:

DBMS_JOB.BROKEN ( 
   job       IN  BINARY_INTEGER,
   broken    IN  BOOLEAN,
   next_date IN  DATE DEFAULT SYSDATE);

参数说明:

  • job 定时任务的标识符ID。
  • broken 设置定时任务是否禁用。设置为true表示禁用,false表示启用。
  • next_date 定时任务的下一次运行时间。

示例:

begin
  dbms_job.broken(204,true);
  commit;
end;

CHANGE

change存储过程用于更改现有job的参数。

语法:

DBMS_JOB.CHANGE ( 
   job       IN  BINARY_INTEGER,
   what      IN  VARCHAR2,
   next_date IN  DATE,
   interval  IN  VARCHAR2,
   instance  IN  BINARY_INTEGER DEFAULT NULL,
   force     IN  BOOLEAN DEFAULT FALSE);

参数说明:

  • job 定时任务的标识符ID。
  • what 要运行的PL/SQL存储过程。
  • next_date job下一次要运行的时间。
  • interval job运行的时间间隔。
  • instance 执行job的实例;默认值为null,表示当前实例(当前参数不做任何改变)。
  • force 实例是否验证。如果为true,则指定的实例必须正在运行,否则,该存储过程会报错;如果为false(默认值),则任何正整数都可以作为job实例。(包括null)

示例:

begin
  dbms_job.change(210,null,null,'sysdate+30/86400',1,true);
  commit;
end;

INSTANCE

instance存储过程更改现有job的运行实例。

语法:

DBMS_JOB.INSTANCE ( 
   job        IN BINARY_INTEGER,
   instance   IN BINARY_INTEGER,
   force      IN BOOLEAN DEFAULT FALSE);

参数说明:

  • job 定时任务的标识符ID。
  • instance 执行job的实例;默认值为null,表示当前实例(当前参数不做任何改变)。
  • force 实例是否验证。如果为true,则指定的实例必须正在运行,否则,该存储过程会报错;如果为false(默认值),则任何正整数都可以作为job实例。(包括null)。

示例:

begin
  dbms_job.instance(210,1,false);
  commit;
end;

INTERVAL

interval存储过程更改现有job的运行间隔。

如果interval参数值为null,则该job在下一次成功执行后自动从队列中删除。(自动删除该job)

语法:

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

参数说明:

  • job 定时任务的标识符ID。
  • interval job运行的时间间隔。(interval参数必须计算为将来的某个时间。)

示例:

begin
  dbms_job.interval(211,null);
  commit;
end;

NEXT_DATE

next_date存储过程更改现有job下一次运行的时间。

语法:

DBMS_JOB.NEXT_DATE ( 
   job       IN  BINARY_INTEGER,
   next_date IN  DATE);

参数说明:

  • job 定时任务的标识符ID。
  • next_date 下一次执行的时间。

示例:

begin
  dbms_job.next_date(211,sysdate+1);
  commit;
end;

REMOVE

remove存储过程移除现在的job。

需要注意,正在执行的job不会被删除。

语法:

DBMS_JOB.REMOVE ( 
   job       IN  BINARY_INTEGER );

参数说明:

  • job 定时任务的标识符ID。

示例:

begin
  dbms_job.next_date(211,sysdate+1);
  commit;
end;

RUN

run存储过程立即执行现有job。

需要注意,即使BROKEN设置为true,该job也会运行。

语法:

DBMS_JOB.RUN ( 
   job       IN  BINARY_INTEGER,
   force     IN  BOOLEAN DEFAULT FALSE);

参数说明:

  • job 定时任务的标识符ID。
  • force 如果为true,则当前实例不需要和job中指定的实例一致。如果为false,则当前实例必须与job指定的实例一致才能够运行。

示例:

begin
  dbms_job.run(213,false);
  commit;
end;

SUBMIT

submit存储过程创建一个job。

语法:

DBMS_JOB.SUBMIT ( 
   job       OUT BINARY_INTEGER,
   what      IN  VARCHAR2,
   next_date IN  DATE DEFAULT SYSDATE,
   interval  IN  VARCHAR2 DEFAULT 'null',
   no_parse  IN  BOOLEAN DEFAULT FALSE,
   instance  IN  BINARY_INTEGER DEFAULT any_instance,
   force     IN  BOOLEAN DEFAULT FALSE);

参数说明:

  • job 定时任务的标识符ID。
  • what 要运行的PL/SQL存储过程或代码块。
  • next_date job下一次要运行的时间。
  • interval job运行的时间间隔。
  • no_parse 如果设置为false(默认值),则Oracle解析job中的存储过程。如果设置为true,则Oracle在第一次运行时解析job中的存储过程。
  • instance 执行job的实例;默认值为null,表示当前实例(当前参数不做任何改变)。
  • force 实例是否验证。如果为true,则指定的实例必须正在运行,否则,该存储过程会报错;如果为false(默认值),则任何正整数都可以作为job实例。(包括null)

示例:

declare 
WATER_JOB number;
begin
dbms_job.submit(
job=>WATER_JOB,
what=>'test_aa;',
next_date=>sysdate,
interval => 'sysdate+10/86400');
commit;
end;

USER_EXPORT

user_export存储过程导出job的文本。(导出job的语句)

语法:

DBMS_JOB.USER_EXPORT ( 
   job      IN     BINARY_INTEGER,
   mycall   IN OUT VARCHAR2,
   myinst   IN OUT VARCHAR2);

参数说明:

  • job 定时任务的标识符ID。
  • mycall 生成重新创建的job的文本。
  • myinst 生成更改实例的job调用文本。

示例:

declare
jobcall varchar2(3000); 
myinst varchar2(3000); 
begin
  dbms_job.user_export(223,jobcall,myinst);
  dbms_output.put_line(jobcall); 
  dbms_output.put_line(myinst);
  commit;
end;

WHAT

what存储过程更改现有job调用的存储过程。

语法:

DBMS_JOB.WHAT ( 
   job       IN  BINARY_INTEGER,
   what      IN  VARCHAR2);

参数说明:

  • job 定时任务的标识符ID。
  • what 要运行的PL/SQL存储过程。

示例:

begin
dbms_job.what(223,'sdsdf;');
commit;
end;

标签:BINARY,DBMS,存储,JOB,job,实例,Oracle
From: https://blog.51cto.com/bxbdba/6905562

相关文章

  • Oracle 19c 报ORA-704 ORA-01555故障处理---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:Oracle19c报ORA-704ORA-01555故障处理作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]异常断电导致数据库无法启动,尝试对数据文件进行recover操作,报ORA-00283ORA-00742ORA-00......
  • oracle 参数建议和详解
    隐藏参数_optimizer_adaptive_cursor_sharing建议关闭隐藏参数_optimizer_adaptive_cursor_sharing只有在开启了_optim_peek_user_binds后才有意义,它可以防止不合理的执行计划,但是在实际生产环境中,_optimizer_adaptive_cursor_sharing会带来各种问题,产生bug,因此建议关闭该参......
  • Oracle数据库DB_NAME、SERVICE_NAME、SID、INSTANCE_NAME、DB_UNIQUE_NAME的区别 转
    Oracle数据库DB_NAME、DBID、DB_UNIQUE_NAME、SERVICE_NAME、SID、INSTANCE_NAME、GLOBAL_DATABASE_NAME的区别DB_NAME:①是数据库名,长度不能超过8个字符,记录在datafile、redolog和controlfile中②在DataGuard环境中DB_NAME相同而DB_UNIQUE_NAME不同③在RAC环境中,各个节点的DB_......
  • 动态构建IN查询数据格式的Oracle SQL实现方法
    背景在实际的数据库查询中,经常会遇到根据不同条件动态构建IN查询的需求。例如,当选择一个部门时,需要查询指定部门的数据;当选择多个部门时,需要查询多个部门的数据。在OracleSQL中,我们不能直接在一条SQL查询中动态构建IN查询的数据格式。然而,使用CASEWHEN语句,我们可以巧妙地解决这个......
  • 从 MySQL 到 Oracle 再到全面 TiDB ,云盛海宏的数据库架构实践
    作者:TiDB社区小助手导读云盛海宏的零售系统是支持全渠道、全品类运动鞋服的零售服务平台,为全球8000+多家线下门店提供零售服务支持。发展至今,云海零售系统的数据库经历了从MySQL到Oracle再到全面TiDB的架构演进。本文由InfoQ主编赵钰莹撰写,与云盛海宏首席架构师洪亮共同......
  • Oracle使用spool导出数据
    第一章、导出参数设置settermoff--关闭,不在屏幕上展示结果settrimspoolon--打开,去除重定向(spool)输出美航的拖尾控股,缺省为offsetechooff--关闭,避免打印sql,西安市start启动的脚本中每个sql指令,缺省为onsetfeedbackoff--关闭,避免展示,回现本次sql处理的记录条......
  • xxl-job 定时任务的调研及学习
    xxl-job定时任务官网xxl-jobspringboot整合资料参考一、xxl-job简介xxl-job是一个开源的分布式定时任务框架,它可以与其他微服务组件一起构成微服务集群。它的调度中心(xxl-job)和执行器(自己的springboot项目中有@XxlJob("定时任务名称")的方法)是相互分离,分开部署的,两者通......
  • spool命令使用详解 oracle导出txt文件
    spool命令使用详解原文链接:https://www.xjx100.cn/news/454608.html?action=onClickSPOOL命令使用详解SPOOL是SQLPLUS的命令,必须在SQLPLUS中使用,主要完成以标准输出方式输出SQLPLUS的命令及执行结果,一般常用户格式化导出ORACLE表数据。 对于SPOOL数据的SQL,最好要自己定......
  • listagg 函数--oracle 11g release 2
    http://xpchild.blog.163.com/blog/static/10180985920108485721969/ listagg函数--oracle11grelease2      本文描述了在oracle11grelease2版本中新增的listagg函数,listagg是一个实现字符串聚合的oracle内建函数。作为一种普遍的技术,网络上也有多......
  • Oracle问题:一张表推荐创建多少索引合适
     Oracle问题:一张表推荐创建多少索引合适 明确索引主要影响insert、delete以及索引字段的update情况下(还会占用空间,一般不考虑这点),结合需求:1.如果表基本静态,存储足够的情况下想建多少个都可以。2.字段如果null值占比大,对字段等值查询或者关联查询多也可以考虑,因为null不会去......