注册
dmbs_job 使用方法总结及测试
技术分享/ 文章详情 /

dmbs_job 使用方法总结及测试

奥特曼打小怪兽 2024/08/02 877 0 0

1DBMS_JOB 包

DBMS_JOB 系统包用于创建定时任务,支持按指定的时间或间隔执行用户定义的作业。
DM MPP 环境下不支持 DBMS_JOB 包。

1.1相关方法

1.1.1BROKEN 过程

更新一个已提交的工作的状态,典型地是用来把一个已过期工作标记为未过期工作;或者把一个未过期的工作设置为何时过期。
语法如下:
PROCEDURE Broken(
job in integer,
broken in boolean,
next_date in datetime :=SYSDATE
);
参数详解
job
工作号,唯一标识一个特定工作。
broken
指示此工作是否将标记为过期,TRUE 或 FALSE。TRUE 表明过期,而 FALSE 表明未过期。
next_date
指示在什么时候此工作将再次运行。此参数缺省值为当前日期和时间。

1.1.2CHANGE 过程

用来改变指定工作的设置。
语法如下:
PROCEDURE Change (
JOB IN INTEGER,
WHAT IN VARCHAR2,
NEXT_DATE IN DATETIME,
INTERVAL IN VARCHAR2,
INSTANCE IN INT DEFAULT 0,
FORCE IN BOOLEAN DEFAULT FALSE
);
参数详解
job
工作号,唯一标识一个特定工作。
what
是由此工作运行的一块 PL/SQL 代码块。
next_date
指示何时此工作将被执行。
interval
指示一个工作重执行的频度。
instance
指定 DSC 集群环境中执行该作业的节点号,取值范围 [0,15]。节点号必须是实际存在的节点。
force
参数仅作兼容用,无实际作用。

注意
由于CHANGE是保留字,调用该过程时需要在过程名上加双引号。

1.1.3INTERVAL 过程

用来显式地设置重执行一个工作之间的时间间隔数。
语法如下:
PROCEDURE Interval (
job in integer,
interval in varchar2
);
参数详解
job
工作号,唯一标识一个特定工作。
interval
指示一个工作重执行的频度,该频度是一个日期表达式字符串,以当天 0 点 0 分为起点和该日期表达式字符串计算出来的日期时间之差,以秒为最小间隔单位。例如’sysdate + 1/86400’则表示间隔 1 秒,'sysdate+1/1440’则表示间隔 1 分钟,'sysdate + 1/24’则表示间隔 1 小时,'sysdate +1’则表示间隔 1 天,最多允许间隔 100 天。达梦的 INTERVAL 参数不支持以周,月,季等单位方式指定间隔。

注意
由于INTERVAL是保留字,调用该过程时需要在过程名上加双引号。

1.1.4ISUBMIT 过程

用来用特定的工作号提交一个工作。这个过程与 Submit()过程的唯一区别在于此 job 参数作为 IN 型参数传递且包括一个由开发者提供的工作号。如果提供的工作号已被使用,将产生一个错误。
语法如下:
PROCEDURE ISubmit (
job in integer,
what in varchar2,
next_date in datetime,
interval in varchar2 default null,
no_parse in boolean:=FALSE
);
参数详解

job

是由用户指定的工作编号,不能为负数,且必须是不存在的工作编号。


what

是将被执行的 PL/SQL 代码块。


next_date

指示何时将运行这个工作。


interval

何时这个工作将被重执行,不指定时缺省为空,表示仅执行一次。


no_parse

指示此工作在提交时或执行时是否应进行语法分析,TRUE 指示此 PL/SQL 代码在它第一次执行时应进行语法分析,而 FALSE 指示本 PL/SQL 代码应立即进行语法分析。

1.1.5NEXT_DATE 过程
用来显式地设定一个工作的执行时间。
语法如下:
PROCEDURE Next_Date(
job in integer,
next_date in datetime
);
参数详解

job

标识一个已存在的工作。


next_date

指示了此工作应被执行的日期与时间。

1.1.6REMOVE 过程

用来删除一个已计划运行的工作。已正在运行的工作不能由调用过程序删除。
语法如下:
PROCEDURE Remove(
job in integer
);
参数详解

job

唯一地标识一个工作。这个参数的值是由为此工作调用 Submit()过程返回的 job 参数的值。

1.1.7RUN 过程

用来立即执行一个指定的工作。需要说明的是,RUN 过程的调用不影响工作的计划运行时间。
语法如下:
PROCEDURE Run(
JOB IN INTEGER,
FORCE BOOLEAN DEFAULT FALSE
);
参数详解

job

标识将被立即执行的工作。


force

参数仅作兼容用,无实际作用。

1.1.8SUBMIT 过程

使用 Submit()过程,工作被正常地计划好。
语法如下:
PROCEDURE SUBMIT (
JOB OUT INTEGER,
WHAT IN VARCHAR2,
NEXT_DATE IN DATE DEFAULT SYSDATE,
INTERVAL IN VARCHAR2 DEFAULT NULL,
NO_PARSE IN BOOLEAN DEFAULT FALSE,
INSTANCE IN INT DEFAULT 0,
FORCE IN BOOLEAN DEFAULT FALSE
);
参数详解
job
是由 Submit()过程返回的工作编号。这个值用来唯一标识一个工作。
what
是将被执行的 PL/SQL 代码块。
next_date
指示将何时运行这个工作,缺省值为当前的日期和时间。
interval
何时这个工作将被重执行,不指定时缺省为空,表示仅执行一次。当工作设置为只执行一次时,参数 next_date 必须设为有效时间,即大于等于当前时间。
no_parse
指示此工作在提交时或执行时是否应进行语法分析,TRUE 指示此 PL/SQL 代码在它第一次执行时应进行语法分析,而 FALSE 指示本 PL/SQL 代码应立即进行语法分析。
instance
指定 DSC 集群环境中执行该作业的节点号,取值范围 [0,15]。节点号必须是实际存在的节点。
force
参数仅作兼容用,无实际作用。

1.1.9WHAT 过程

允许在工作执行时重新设置此正在运行的命令。
语法如下:
PROCEDURE What (
job in integer,
what in out varchar2
);
参数详解

job

标识一个存在的工作。


what

指示将被执行的新的 PL/SQL 代码,如果传入的 what 参数值为空串,那将返回该任务原来的 PL/SQL 代码。

1.2 视图

1.2.1DBA_JOBS 视图

描述数据库中所有的 JOB。
序号 列 数据类型 说明
1 JOB INTEGER 工作的唯一标识号
2 LOG_USER VARCHAR(8188) 提交工作的用户
3 PRIV_USER VARCHAR(8188) 赋予工作权限的用户
4 SCHEMA_USER VARCHAR(8188) 对工作做语法分析的用户模式
5 LAST_DATE DATE 最后一次成功运行工作的时间
6 LAST_SEC TIME(0) HH:MM:SS 格式的 LAST_DATE 的时间
7 THIS_DATE DATE 正在运行工作的开始时间
8 THIS_SEC TIME(0) HH:MM:SS 格式的 THIS_DATE 的时间
9 NEXT_DATE DATE 下一次定时任务运行的时间
10 NEXT_SEC TIME(0) HH:MM:SS 格式的 NEXT_DATE 的时间
11 TOTAL_TIME DOUBLE 该 JOB 每次运行时间的总和,该值会进行累加
12 BROKEN VARCHAR(1) 是否工作中断标识参数,Y 是,N 否
13 INTERVAL INTEGER JOB 每次执行的时间间隔,单位:秒
14 FAILURES BIGINT 工作运行连续没有成功的次数
15 WHAT VARCHAR(1800) 执行工作的 PL/SQL 块
16 NLS_ENV VARCHAR(1) 工作运行的 NLS 会话设置
17 MISC_ENV VARCHAR(1) 工作运行的其他一些会话参数
18 INSTANCE INTEGER 能够运行或正在运行工作的实例的 id 号。 单节点上默认值为 1,如果是 DM MPP 或 DMDSC 环境。 默认值为实例序号加 1。

1.2.2USER_JOBS 视图

描述当前用户所拥有的 JOB。视图结构与 DBA_JOBS 相同。

1.2.3DBA_JOBS_RUNNING

显示实例中所有正在执行的作业。
序号 列 数据类型 说明
1 SID BIGINT 作业执行的 SESSION 的 ID
2 JOB INTEGER 作业号
3 FAILURES INTEGER 作业自上一次成功以来的失败次数,暂不支持
4 LAST_DATE DATE 最后一次成功运行工作的时间
5 LAST_SEC TIME(0) HH:MM:SS 格式的 LAST_DATE 的时间
6 THIS_DATE DATE 本次运行的开始时间
7 THIS_SEC TIME(0) HH:MM:SS 格式的 THIS_DATE 的时间
8 INSTANCE INTEGER 能够运行或正在运行作业的实例的 ID 号。 单节点上默认值为 1,如果是 DM MPP 或 DMDSC 环境,默认值为实例序号加 1

1.3创建、删除语句

创建或删除 DBMS_JOB 系统包。
语法如下:
void
SP_INIT_JOB_SYS(
CREATE_FLAG int
)
参数详解
CREATE_FLAG
为 1 时表示创建 DBMS_JOB 包;为 0 表示删除该系统包。
返回值

举例说明
例 创建 DBMS_JOB 系统包。
SP_INIT_JOB_SYS(1);

2测试案例及相关方法说明

为了能完成演示所有的参数创建了一下几个过程

2.1创建

创建一个job 有两种方法 1.Submit() 2.ISUBMIT
两种的区别
1.ISUBMIT 是自己指定了一个job 号 如果 job重复则会报错
2.SUBMIT 多了在dsc环境下指定哪个实例INSTANCE运行这个job
3.force 参数仅作兼容用,无实际作用
PROCEDURE ISubmit (
job in integer,
what in varchar2,
next_date in datetime,
interval in varchar2 default null,
no_parse in boolean:=FALSE
);

PROCEDURE SUBMIT (
JOB OUT INTEGER,
WHAT IN VARCHAR2,
NEXT_DATE IN DATE DEFAULT SYSDATE,
INTERVAL IN VARCHAR2 DEFAULT NULL,
NO_PARSE IN BOOLEAN DEFAULT FALSE,
INSTANCE IN INT DEFAULT 0,
FORCE IN BOOLEAN DEFAULT FALSE
);

1.创建表

create table tab1 (id int);

2.创建执行的存储过程

create or replace procedure pro_test1 as
begin
insert into tab1 id values(1);
commit;
end;
/
#3.创建job

BEGIN
dbms_job.SUBMIT (1,‘pro_test1’,sysdate , ‘sysdate + 10/86400’ );
COMMIT;
end;
/

2.2运行

begin
dbms_job.run(1722485235);
end;
/

2.3更改

1.CHANGE 可以更改所有的参数
2.INTERVAL 更改时间间隔
3.NEXT_DATE 更改下次运行时间
4.REMOVE 删除job
5.WHAT 更改具体的执行存储过程
2.4停止
1.BROKEN 启动/关闭这个存储过程的下次执行时间用于实现 后续不在这个job的启停时间
begin
dbms_job.Broken( 1722485235, TRUE , SYSDATE );
end;
/

https://eco.dameng.com/

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服