目录
前言
DM作业系统。
一、作业系统简介
DM 的作业系统为用户提供了创建作业,并对作业进行调度执行以完成相应管理任务的功能。 可以让这些重复的数据库任务自动完成,实现日常工作自动化。 作业系统大致包含作业、警报和操作员三部分。用户需要为作业配置步骤和调度。
二、权限及系统表
1.作业权限
GRANT ADMIN JOB TO NORMAL_USER;
默认 DBA 拥有全部的作业权限; ADMIN JOB 权限可以添加、配置、调度和删除作业等,但没有作业环境初始化 SP_INIT_JOB_SYS(1)和作业环境销毁 SP_INIT_JOB_SYS(0)的权限。
2.系统表
SYSJOBS表存储用户定义的作业信息。每个作业对应此表中的一条记录。每一条记录都有一个自增ID,用来唯一表示这个作业
select * from sysjob.sysjobs;
1.SYSJOBSTEPS
SYSJOBSTEPS 存储作业包括的所有步骤信息
2.SYSJOBSCHEDULES
一个作业可以有多个调度,调度用来指定一个作业的执行情况,可以指定作业的执行方式及时间范围。
3.SYSJOBHISTORIES2
SYSJOBHISTORIES2 存储作业的执行情况的日志。
4.SYSSTEPHISTORIES2
SYSSTEPHISTORIES2 存储作业步骤的执行情况的日志。
5.SYSOPERATORS
SYSOPERATORS 存储作业管理系统中所有已定义操作员的信息,以 NAME 为聚集索引,意味着不能具有同名的操作员。
6.SYSALERTS
SYSALERTS 存储作业管理系统中所有已定义的警报信息,聚集索引为 NAME,意味着不能定义同名的警报。
7.SYSALERTNOTIFICATIONS
SYSALERTNOTIFICATIONS 存储警报需要通知的操作员的信息,即警报和操作员的关联信息。
8.SYSALERTHISTORIES
SYSALERTHISTORIES 存储警报发生的历史记录的日志。
9.SYSMAILINFO
SYSMAILINFO 存储作业管理系统管理员的信息。
三、通过系统过程创建和删除
1.命令行操作
可以通过调用系统过程 SP_INIT_JOB_SYS(1)来创建这些表。这些表被建在SYSJOB 模式下。
创建SYSJOB模式及系统表:
SP_INIT_JOB_SYS(1);
删除SYSJOB模式及系统表:
SP_INIT_JOB_SYS(0);
2.图形界面操作
三、操作员
分别用 SP_CREATE_OPERATOR、 SP_ALTER_OPERATOR 和 SP_DROP_OPERATOR 三个过程来完成操作员的创建、修改和删除。
1、创建操作员
SP_CREATE_OPERATOR (
OPR_NAME VARCHAR(128),
ENABLED INT,
EMAILADDR VARCHAR(128),
NETSEND_IP VARCHAR(128)
)
2、修改操作员
SP_ALTER_OPERATOR (
OPR_NAME VARCHAR(128),
ENABLED INT,
EMAILADDR VARCHAR(128),
NETSEND_IP VARCHAR(128)
)
3、删除操作员
SP_DROP_OPERATOR (
OPR_NAME VARCHAR(128)
)
四、作业
1、创建作业
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)
)
例如, 创建一个名为 TEST 的作业。
SP_CREATE_JOB('TEST', 1, 1, 'TOM', 2, 1, 'TOM', 2, '每一个测试作业');
创建完成这个作业后,系统就会在 SYSJOBS 中插入一条相应的记录,但是这个作业不
会做任何事情,只是一个空的作业,如果需要让它执行,还需要配置这个作业。
2、修改作业
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)
)
函数 SP_ALTER_JOB 的参数和 SP_CREATE_JOB 的参数完全相同,除了 JOB_NAME 可修 改外,其他的属性都可修改。对于可修改参数,如果要修改,则指定新值;如果不修改,则 继续指定原值。 作业属性修改后,需要重新配置作业,使修改生效。
例如, 下面的语句修改了作业 TEST 的一些信息。
SP_ALTER_JOB('TEST', 0, 1, 'DBA', 2, 1, 'DBA', 2, '修改一个作业');
SP_JOB_CONFIG_START('TEST');
SP_JOB_CONFIG_COMMIT('TEST');
3、删除作业
SP_DROP_JOB (
JOB_NAME VARCHAR(128)
)
例如, 删除作业 TEST。
SP_DROP_JOB('TEST');
4、配置作业
配置一个作业主要包括以下几个步骤:
1. 开始作业配置;
2. 指定要开始配置一个作业;
3. 为指定的作业增加步骤;
4. 为指定的作业增加调度;
5. 结束作业配置
1.用系统过程 SP_JOB_CONFIG_START 指定对一个作业配置的开始。
SP_JOB_CONFIG_START (
JOB_NAME VARCHAR(128)
)
例如, 开始对作业 TEST 进行配置。
SP_JOB_CONFIG_START('TEST');
2.设置作业执行节点
SP_JOB_SET_EP_SEQNO (
JOB_NAME VARCHAR(128),
EP_SEQNO INT
)
例如,下面的例子设置了作业在指定的节点号上执行。
SP_JOB_SET_EP_SEQNO(‘TEST’,2);
3.增加作业的步骤通过系统过程 SP_ADD_JOB_STEP 实现。
SP_ADD_JOB_STEP (
JOB_NAME VARCHAR(128),
STEP_NAME VARCHAR(128),
TYPE INT,
COMMAND VARCHAR(8187),
SUCC_ACTION INT,
FAIL_ACTION INT,
RETRY_ATTEMPTS INT,
RETRY_INTERVAL INT,
OUTPUT_FILE_PATH VARCHAR(256),
APPEND_FLAG INT
)
例如, 下面的语句为作业 TEST 增加了步骤 STEP1。
SP_ADD_JOB_STEP('TEST', 'STEP1', 0, 'INSERT INTO MYINFO VALUES(1000, ''HELLO
WORLD''); ', 0, 0, 2, 1, NULL, 0);
4.修改作业的步骤通过系统过程 SP_ALTER_JOB_STEP 实现
SP_ALTER_JOB_STEP (
JOB_NAME VARCHAR(128),
STEP_NAME VARCHAR(128),
TYPE INT,
COMMAND VARCHAR(8187),
SUCC_ACTION INT,
FAIL_ACTION INT,
RETRY_ATTEMPTS INT,
RETRY_INTERVAL INT,
OUTPUT_FILE_PATH VARCHAR(256),
APPEND_FLAG INT
)
所有参数与 SP_ADD_JOB_STEP 的参数一样
5.可 以 通 过 系 统 过 程SP_DROP_JOB_STEP 删除这个步骤。
SP_DROP_JOB_STEP (
JOB_NAME VARCHAR(128),
STEP_NAME VARCHAR(128)
)
例:删除STEP1
SP_DROP_JOB_STEP('TEST', 'STEP1');
6.增加调度通过调度系统过程 SP_ADD_JOB_SCHEDULE 实现。
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)
)
例如, 下面的语句为作业 TEST 增加名为 SCHEDULE3 的调度。
SP_ADD_JOB_SCHEDULE('TEST', 'SCHEDULE3', 1, 1, 1, 0, 1, CURTIME, '23:59:59',
CURDATE, NULL, '一个测试调度');
7.修改调度通过调度系统过程 SP_ALTER_JOB_SCHEDULE 实现。
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)
)
所有参数与 SP_ADD_JOB_SCHEDULE 的参数一样
8.调用的函数为SP_DROP_JOB_SCHEDULE。
SP_DROP_JOB_SCHEDULE (
JOB_NAME VARCHAR(128),
SCHEDULE_NAME VARCHAR(128)
)
例如, 删除作业 TEST 中名为 SCHEDULE3 的调度。
SP_DROP_JOB_SCHEDULE('TEST', 'SCHEDULE3');
9.结束作业配置
在配置完成后,用户需要对前面所做的配置进行提交,表示对作业的配置已经完成,同 时将这个作业加入到运行队列。这一步可以通过系统过程 SP_JOB_CONFIG_COMMIT 实现。
SP_JOB_CONFIG_COMMIT (
JOB_NAME VARCHAR(128)
)
10.清除作业日志记录,可以通过系统过程 SP_JOB_CLEAR_HISTORIES 清除迄今为止某个作业的所有日志记录,即删除表 SYSJOBHISTORIES2、 SYSSTEPHISTORIES2 中的相关记录。
SP_JOB_CLEAR_HISTORIES (
JOB_NAME VARCHAR(128)
)
例:删除作业TEST
SP_JOB_CLEAR_HISTORIES ('TEST');
五、配置定时作业
开启作业:
SP_INIT_JOB_SYS(1);
1.全备作业
call SP_CREATE_JOB('bakfull',1,0,'',0,0,'',0,'周六23:00全备');
call SP_JOB_CONFIG_START('bakfull');
call SP_ADD_JOB_STEP('bakfull', 'bak01', 6, '01000000/dmdata1/dmbak', 1, 2, 0, 0, NULL,0);
call SP_ADD_JOB_SCHEDULE('bakfull', 'bak01', 1, 2, 1, 32, 0, '23:00:00', NULL, '2020-11-02 14:42:15', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakfull');
2.增备作业
call SP_CREATE_JOB('bakincr',1,0,'',0,0,'',0,'每天23:00增备');
call SP_JOB_CONFIG_START('bakincr');
call SP_ADD_JOB_STEP('bakincr', 'bak02', 6, '11000000/dmdata1/dmbak|/dmdata1/dmbak', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakincr', 'bak2', 1, 2, 1, 95, 0, '23:00:00', NULL, '2020-11-02 14:44:30', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakincr');
3.删除备份作业
call SP_CREATE_JOB('delbak',1,0,'',0,0,'',0,'周日02:00删除前14天备份');
call SP_JOB_CONFIG_START('delbak');
call SP_ADD_JOB_STEP('delbak', 'bak1', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dmdata1/dmbak'');call sp_db_bakset_remove_batch(''DISK'',now()-14);', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('delbak', 'del01', 1, 1, 1, 0, 0, '23:30:00', NULL, '2020-11-02 14:48:41', NULL, '');
call SP_JOB_CONFIG_COMMIT('delbak');
4.归档清理作业
每周日02:00执行删除30天以前的归档日志,2020年10月10日00:00开始执行
call SP_CREATE_JOB('JOB_DEL_ARCH_TIMELY',1,0,'',0,0,'',0,'定时删除归档日志');
call SP_JOB_CONFIG_START('JOB_DEL_ARCH_TIMELY');
call SP_ADD_JOB_STEP('JOB_DEL_ARCH_TIMELY', 'STEP_DEL_ARCH', 0,'SF_ARCHIVELOG_DELETE_BEFORE_TIME(SYSDATE - 30);', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('JOB_DEL_ARCH_TIMELY', 'SCHEDULE_DEL_ARCH',1, 2, 1, 1, 0, '02:00:00', NULL, '2020-10-10 00:00:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('JOB_DEL_ARCH_TIMELY');
5.统计信息作业
--每天自动收集统计信息
call SP_CREATE_JOB('STAT_GATHER',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('STAT_GATHER');
call SP_ADD_JOB_STEP('STAT_GATHER', 'STAT_GATHER', 3, '', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('STAT_GATHER', 'STAT_GATHER', 1, 1, 1, 0, 0, '23:38:35', NULL, '2021-04-29 13:38:35',NULL, '');
call SP_JOB_CONFIG_COMMIT('STAT_GATHER');
6.手动执行作业
查询作业表
select sysjob.sysjobs;
根据作业号执行作业:
call dbms_job.run(1626857481);
总结
更多资讯请上达梦技术社区了解:https://eco.dameng.com