作业
作业是由 DM 代理程序按顺序执行的一系列指定的操作。作业可以执行更广泛的活动,包括运行 DMPL/SQL 脚本、定期备份数据库、对数据库数据进行检查等。可以创建作业来执行经常重复和可调度的任务,作业按照一个或多个调度的安排在服务器上执行。作业也可以由一个或多个警报触发执行,并且作业可产生警报以通知用户作业的状态。每个作业由一个或多个作业步骤组成,作业步骤是作业对一个数据库或者一个服务器执行的动作。每个作业必须至少有一个作业步骤。
通常作业的管理是由 DBA 来维护,普通用户没有操作作业的权限,为了让普通用户可以创建、配置和调度作业,需要赋予普通用户管理作业权限:ADMIN JOB。
默认 DBA 拥有全部的作业权限;ADMIN JOB 权限可以添加、配置、调度和删除作业等,但没有作业环境初始化 SP_INIT_JOB_SYS(1)和作业环境销毁 SP_INIT_JOB_SYS(0)的权限。
创建作业环境
要进行作业管理,需要先创建作业环境,即创建一些系统表和系统视图来存储作业相关的对象、历史记录等信息。
系统表有SYSJOBS、SYSJOBSTEPS、SYSJOBSCHEDULES、SYSMAILINFO、SYSJOBHISTORIES2、SYSSTEPHISTORIES2、SYSALERTHISTORIES、SYSOPERATORS、SYSALERTS和SYSALERTNOTIFICATIONS。
系统视图有USER_JOBS_VIEW、USER_JOBSTEPS_VIEW、USER_JOBSCHEDULES_VIEW、USER_JOBHISTORIES_VIEW和USER_STEPHISTORIES_VIEW。
系统表和系统视图均位于 SYSJOB 模式下。
1、通过系统过程创建和删除
用户可以通过调用系统过程 SP_INIT_JOB_SYS(1)来创建所需的表和视图。这些表被建在 SYSJOB 模式下。
—创建作业环境
SQL> SP_INIT_JOB_SYS(1);
—检查SYSJOB模式
—删除作业环境
SQL> SP_INIT_JOB_SYS(0);
2、通过图形化客户端创建和删除
作业实现
1、创建、修改、删除作业
1)创建作业
创建作业通过系统过程 SP_CREATE_JOB 实现。
—语法介绍
SP_CREATE_JOB (
JOB_NAME VARCHAR(128), #作业名称
ENABLED INT, #作业是否启用
ENABLE_EMAIL INT, #作业是否开启邮件
EMAIL_OPTR_NAME VARCHAR(128), #指定操作员
EMAIL_TYPE INT, #什么情况发送邮件
ENABLED_NETSEND INT, #作业开启网络发送
NETSEND_OPTR_NAME VARCHAR(128), #指定操作员
NETSEND_TYPE INT, #什么情况发送网络信息
DESCRIBE VARCHAR(8187) #作业描述
)
—创建一个空作业
SQL> call SP_CREATE_JOB(‘TEST’,1,0,‘’,0,0,‘’,0,‘测试作业’);
2)修改作业
某个作业中的信息不合理需要修改时,可以调用系统过程SP_ALTER_JOB来实现。只允许DBA或作业拥有者使用SP_ALTER_JOB或SP_RENAME_JOB对作业进行修改。除了JOB_NAME不可修改外,其他的属性都可修改。对于可修改参数,如果要修改,则指定新值;如果不修改,则继续指定原值。作业属性修改后,需要重新配置作业,使修改生效。
(1)SP_ALTER_JOB
—语法介绍
SP_ALTER_JOB (
JOB_NAME VARCHAR(128), #作业名称
ENABLED INT, #作业是否启用
ENABLE_EMAIL INT, #作业是否开启邮件
EMAIL_OPTR_NAME VARCHAR(128), #指定操作员
EMAIL_TYPE INT, #什么情况发送邮件
ENABLED_NETSEND INT, #作业开启网络发送
NETSEND_OPTR_NAME VARCHAR(128), #指定操作员
NETSEND_TYPE INT, #什么情况发送网络信息
DESCRIBE VARCHAR(8187) #作业描述
)
—测试
SQL> call SP_ALTER_JOB (‘TEST’,1,0,‘’,0,0,‘’,0,‘修改作业’);
SQL> SP_JOB_CONFIG_START(‘TEST’);
SQL> SP_JOB_CONFIG_COMMIT(‘TEST’);
(2)SP_RENAME_JOB
—语法介绍
SP_RENAME_JOB (
JOB_NAME VARCHAR(128), #作业名称
NEW_NAME VARCHAR(128) #新作业名称
)
—测试
SQL> SP_RENAME_JOB(‘TEST’, ‘TEST2’);
(3)SP_ENABLE_JOB
—语法介绍
SP_ENABLE_JOB (
JOB_NAME VARCHAR(128), #作业名称
ENABLED INT #作业是否启用,1启用,0停用
)
—测试
SQL> SP_ENABLE_JOB(‘TEST2’, 0);
3)删除作业
若由于其它什么原因需要删除作业,可以调用系统过程SP_DROP_JOB实现。只允许DBA用户或者作业拥有者使用SP_DROP_JOB删除作业。
—语法介绍
SP_DROP_JOB (
JOB_NAME VARCHAR(128) #作业名称
)
—测试
SQL> SP_DROP_JOB(‘TEST2’);
2、配置作业
配置一个作业主要包括以下几个步骤:1、开始作业配置;2、指定要开始配置一个作业;3、为指定的作业增加步骤;4、为指定的作业增加调度;5、结束作业配置。
只有在结束作业配置后,这个作业才算配置完成,同时如果这个作业是ENABLE状态的, 那么它会立即生效。也就是从“结束作业配置”时刻开始就会根据它所定义的调度来执行操作了。
1)开始配置作业
开始作业配置之后到结束作业配置之前这段时间,当前会话会处于作业配置状态。配置 状态不允许做任何的创建、修改、删除对象的操作。开始作业配置和结束作业配置两个过程配合使用,是为了保证作业配置的完整性。
—语法介绍
SP_JOB_CONFIG_START(
JOB_NAME VARCHAR(128) #作业名称
)
2)设置作业执行节点
DSC 环境下,用系统过程 SP_JOB_SET_EP_SEQNO 指定作业执行节点。
—语法介绍
SP_JOB_SET_EP_SEQNO (
JOB_NAME VARCHAR(128), #作业名称
EP_SEQNO INT #DSC 集群环境中执行该作业的节点号
)
3)作业步骤
增加、删除作业步骤必须是在配置作业开始后才能进行,否则系统会报错,这样处理主要是为了保证作业配置的完整性。
(1)增加步骤
—增加步骤
SP_ADD_JOB_STEP (
JOB_NAME VARCHAR(128), #作业名称
STEP_NAME VARCHAR(128), #表示增加的步骤名
TYPE INT, #步骤的类型
COMMAND TEXT, #步骤在运行时所执行的语句
SUCC_ACTION INT, #指定步骤执行成功后操作
FAIL_ACTION INT, #指定步骤执行失败后操作
RETRY_ATTEMPTS INT, #当步骤执行失败后重试次数
RETRY_INTERVAL INT, #执行重试之间的间隔时间
OUTPUT_FILE_PATH VARCHAR(256), #示步骤执行时输出文件的路径
APPEND_FLAG INT #输出文件的追写方式
)
—执行指定步骤
SP_JOB_STEP_SET_NEXT_STEP (
JOB_NAME VARCHAR(128), #作业名称
STEP_NAME VARCHAR(128), #步骤名称
SUCC_NEXT_STEP VARCHAR(128), #指定步骤执行成功时,下一步骤的名称
FAIL_NEXT_STEP VARCHAR(128) #指定步骤执行失败时,下一步骤的名称
)
(2)修改步骤
—修改作业
SP_ALTER_JOB_STEP (
JOB_NAME VARCHAR(128), #作业名称
STEP_NAME VARCHAR(128), #表示增加的步骤名
TYPE INT, #步骤的类型
COMMAND TEXT, #步骤在运行时所执行的语句
SUCC_ACTION INT, #指定步骤执行成功后操作
FAIL_ACTION INT, #指定步骤执行失败后操作
RETRY_ATTEMPTS INT, #当步骤执行失败后重试次数
RETRY_INTERVAL INT, #执行重试之间的间隔时间
OUTPUT_FILE_PATH VARCHAR(256), #示步骤执行时输出文件的路径
APPEND_FLAG INT #输出文件的追写方式
)
—重命名作业步骤
SP_RENAME_JOB_STEP (
JOB_NAME VARCHAR(128), #作业名称
STEP_NAME VARCHAR(128), #步骤名称
NEW_STEP VARCHAR(128) #新的步骤名称
)
(3)删除步骤
一个作业中的某个步骤不需要了,可以通过系统过程SP_DROP_JOB_STEP删除这个步骤
—语法介绍
SP_DROP_JOB_STEP (
JOB_NAME VARCHAR(128), #作业名称
STEP_NAME VARCHAR(128) #步骤名称
)
4)作业调度
增加、删除调度必须是在配置作业开始后才能进行,否则系统会报错,这样处理主要是为了保证作业配置的完整性。
(1)增加调度
—语法介绍
SP_ADD_JOB_SCHEDULE (
JOB_NAME VARCHAR(128), #作业名称
SCHEDULE_NAME VARCHAR(128), #调度名称
ENABLE INT, #调度是否启用
TYPE INT, #调度类型
FREQ_INTERVAL INT, #不同调度的发送频率
FREQ_SUB_INTERVAL INT, #不同的执行频率
FREQ_MINUTE_INTERVAL INT, #每隔多少分钟执行
STARTTIME VARCHAR(128), #定义被调度起始时间
ENDTIME VARCHAR(128), #定义被调度结束时间
DURING_START_DATE VARCHAR(128), #指定被调度起始时间
DURING_END_DATE VARCHAR(128), #指定被调度结束时间
DESCRIBE VARCHAR(500) #注释信息
)
(2)修改调度
—语法介绍
SP_ALTER_JOB_SCHEDULE (
JOB_NAME VARCHAR(128), #作业名称
SCHEDULE_NAME VARCHAR(128), #调度名称
ENABLE INT, #调度是否启用
TYPE INT, #调度类型
FREQ_INTERVAL INT, #不同调度的发送频率
FREQ_SUB_INTERVAL INT, #不同的执行频率
FREQ_MINUTE_INTERVAL INT, #每隔多少分钟执行
STARTTIME VARCHAR(128), #定义被调度起始时间
ENDTIME VARCHAR(128), #定义被调度结束时间
DURING_START_DATE VARCHAR(128), #指定被调度起始时间
DURING_END_DATE VARCHAR(128), #指定被调度结束时间
DESCRIBE VARCHAR(500) #注释信息
)
(3)删除调度
删除调度必须是在配置作业开始后才能进行,否则系统会报错,这样处理主要是为了保证作业配置的完整性。
—语法介绍
SP_DROP_JOB_SCHEDULE (
JOB_NAME VARCHAR(128), #作业名称
SCHEDULE_NAME VARCHAR(128) #步骤名称
)
5)结束作业配置
在配置过程中,可以对指定的作业增加、删除任意多个调度、步骤,但不要做提交操作 以及自动提交操作,否则可能会出现作业配置不完整的问题。
在配置完成后,用户需要对前面所做的配置进行提交,表示对作业的配置已经完成,同时将这个作业加入到运行队列。
—语法介绍
SP_JOB_CONFIG_COMMIT
( JOB_NAME VARCHAR(128) #待结束配置的作业的名称
)
3、查看、清除作业日志记录
1)查看作业日志记录
通过sysjob模式下的sysjobs表,可以查看到所有已经创建的作业。
select * from SYSJOB.SYSJOBS
2)清除作业日志记录
日志记录会不断增加,所以用户可根据实际需要清理过时的日志释放空间。执行后删除表SYSJOBHISTORIES2、SYSSTEPHISTORIES2中的相关记录。
—语法介绍
SP_JOB_CLEAR_HISTORIES (
JOB_NAME VARCHAR(128) #作业名
)
SP_JOB_CLEAR_HISTORIES (
JOB_NAME VARCHAR(128) #作业名
BEFORE_TIME DATETIME #删除目标时间之前的日志记录
)
4、执行作业
通过SP_DBMS_JOB_RUN 系统过程立即执行一次作业。
—语法结束
SP_DBMS_JOB_RUN (
JOB_ID INTEGER #待运行的作业id,可通过查询SYSJOBS系统表得到
)
5、停止作业
—语法结束
SP_STOP_RUNNING_JOB (
JOB_ID INTEGER #待停止的作业id,可通过查询SYSJOBS系统表得到
)
作业测试
—创建作业
call SP_CREATE_JOB(‘JOB_FULL_BAK’,1,0,‘’,0,0,‘’,0,‘全量备份’);
—开始配置
call SP_JOB_CONFIG_START(‘JOB_FULL_BAK’);
—设置作业步骤
call SP_ADD_JOB_STEP(‘JOB_FULL_BAK’, ‘STEP_FULL_BAK’, 6, ‘01000000/dmbak’, 1, 1, 0, 0, NULL, 0);
—设置作业调度
call SP_ADD_JOB_SCHEDULE(‘JOB_FULL_BAK’, ‘SCHEDULE_FULL_BAK’, 1, 2, 1, 64, 0, ‘01:00:00’, NULL, sysdate, NULL, ‘’);
—结束配置
call SP_JOB_CONFIG_COMMIT(‘JOB_FULL_BAK’);
—查看作业
select * from SYSJOB.SYSJOBS
—执行作业
call SP_DBMS_JOB_RUN(1717641865);
—查看日志记录
select * from “SYSJOB”.“SYSJOBHISTORIES2”;
社区地址:https://eco.dameng.com