Job类似Unix中的crontab,有定时执行的功能,可以在指定的时间点或每天的某个时间点等自行执行任务。在各类系统使用运行过程中,经常会遇到需要定时完成的任务,比如定时更新数据,定时统计数据生成报表等等,这些工作都可以使用Job来完成。在openGauss 210中,提供了以下接口来实现管理Job。
1 接口描述
2 接口定义和使用示例
PKG_SERVICEJOB_CANCEL
存储过程CANCEL删除指定的定时任务。
PKG_SERVICEJOB_CANCEL函数原型为:
PKG_SERVICEJOB_CANCEL( job IN INTEGER);
示例:
存储过程FINISH禁用或者启用定时任务。
PKG_SERVICEJOB_FINISH函数原型为:
存储过程JOB_SUBMIT提交一个系统提供的定时任务。
PKG_SERVICEJOB_SUBMIT函数原型为:
PKG_SERVICEJOB_SUBMIT( id IN BIGINT DEFAULT, content IN TEXT, next_date IN TIMESTAMP DEFAULT sysdate, interval_time IN TEXT DEFAULT ‘null’, job OUT INTEGER);
当创建一个定时任务(JOB)时,系统默认将当前数据库和用户名与当前创建的定时任务绑定起来。该接口函数可以通过call或select调用,如果通过select调用,可以不填写出参。如果在存储过程中,则需要通过perform调用该接口函数。如果提交的sql语句任务使用到非public的schema,应该指定表或者函数的schema,或者在sql语句前添加set current_schema = xxx;语句。
示例:
PKG_SERVICEJOB_UPDATE
存储过程UPDATE修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。
PKG_SERVICEJOB_UPDATE函数原型为:
PKG_SERVICEJOB_UPDATE( id IN BIGINT, next_time IN TIMESTAMP, interval_time IN TEXT, content IN TEXT);
示例:
存储过程SUBMIT_ON_NODES创建一个所有CN/DN上的定时任务,仅sysadmin有此权限。
PKG_SERVICESUBMIT_ON_NODES函数原型为:
示例:
PKG_SERVICEISUBMIT_ON_NODES
ISUBMIT_ON_NODES与SUBMIT_ON_NODES语法功能相同,但其第一个参数是入参,即指定的作业号,SUBMIT最后一个参数是出参,表示系统自动生成的作业号。仅sysadmin有此权限。
3 JOB的使用示例
检查Job运行结果
修改为2分钟执行一次
检查修改情况和运行结果
禁用和启用任务
禁用和启用都是同样的函数pkg_servicejob_finish,传入不同的参数表示是禁用还是启用。
可以看到如果重新启用任务的时候,没有指定下次运行时间,那么下次运行时间会始终保持在4000年,意味着仍然不会启动,所以如果禁用任务之后再重新启动,需要手动显式指定下次运行时间。
墨天轮原文链接:>
你那个写法, 看上去也没什么问题。
下面这个方式, 是可以处理的。 你测试着看看?
SQL> variable jobno number;
SQL> begin
2 dbms_jobsubmit(:jobno, 'test1;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')');
3 commit;
4 end;
5 /
PL/SQL 过程已成功完成。
begin
sysdbms_jobsubmit(job => :job, -- job编号
what => 'dbms_outputpub_line(''asdf'');', -- 执行脚本,换成你的存储过程
next_date => to_date('17-01-2011 16:17:31', 'dd-mm-yyyy hh24:mi:ss'), -- 下次执行时间
interval => 'trunc(sysdate)+10/24/60'); -- 执行时间间隔10min
commit;
end;
/
oracle数据库如何启动时自动执行定时任务job
job定时任务需要依托存储过程。
1、创建存储过程:create or replace procedure MYPROC as
begin
insert into TEST values(sysdate);
end;
2、创建job
variable job1 number;
begin
dbms_jobsubmit(:job1,'MYPROC;',trunc(sysdate+1),'sysdate+1');--从今晚12开始运行,以后每天运行一次
end;
建立数据库JOB(作业)步骤--SQL SERVER2000为例企业管理器—>数据库服务器—>管理目录—>SQL SERVER代理—>作业—>右键 选—>新建常规选项页—>输入作业名称—>选中所有者。步骤选项页—>新建—>输入步骤名—>类型 TSQL脚本—>选择需要执行的数据库—>在命令框里输入你的SQL 脚本:如:update tb set 状态= where 日期你可以点左下角的分析按钮,分析一下语法,分析无误,按确定。调度选项页—>新建调度—>输入调度名称—>调度类型 你可以选择也可以点右下角的更改按钮进行更改,确定。任务栏 SQL SERVER服务器的小图标 双击 服务 选中 SQL SERVER AGENT,点开始/继续,选中当启动OS时,自动启动服务,就可以了。到你定的那个时间点,SQL SERVER会自动去执行你的脚本的。如果需要生成脚本的话,企业管理器—>数据库服务器—>管理目录—>SQL SERVER代理—>作业—>右键你刚完成的作业—>所有任务—>生成SQL脚本,即可生成你需要的脚本。
Oracle增量更新有两种方式:1、日志方式的记录,由RMAN设置增量方式完成更新;2、由SQL语句实现更新。
你的“job+存储过程”的实现应该是SQL语句方式,应该完成:去重-插入两个动作。
以上就是关于如何在openGauss 2.1.0中使用Job全部的内容,包括:如何在openGauss 2.1.0中使用Job、oracle数据库怎么启动job、我想要使用oracle 数据库的job在每晚11点执行一个过程,请问下面的语句有什么问题,总是报错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)