定时作业(基础篇)

1.1 定时作业(基础篇)

DM技术交流QQ群:940124259

1.1.1 达梦作业系统简述

达梦的定时作业专门用一个sysjob模式存放任务相关的历史信息以及定时作业的配置。
定时作业系统涉及四个基本元素:
操作员:

  1. 专门负责维护达梦数据库服务器运行实例的管理人员(可由一人或多人共同担任)。
  2. 当发生预警事件时,可以通过邮件或网络传送方式将警报或事件内容告知操作员。

作业:

1.DM代理程序按顺序执行一系列的步骤操作的集合。作业可以执行更广泛的任务操作,如DMPL/SQL脚本、定期备份数据库、更新数据库统计信息等。
2.创建的作业可以制定调度策略(一次执行或多次重复执行),一个作业可以按照一个或多个调度任务被安排在服务器上执行。
3.作业可以由一个或多个警报事件触发而执行,并且作业可将产生的警报(成功或失败消息)通知用户。
4.每个作业由一个或多个作业步骤组成,作业步骤是作业对一个数据库或一个服务器执行的动作指令。每个作业至少有一个作业步骤。

警报:

1.警报属于数据库系统中发生的某种特定事件,如作业执行失败、某操作执行失败的错误代码等。
2.主要作用是以快速的方式通知操作员了解系统中发生的事件状况。
3.可以为警报定义产生的条件,还可定义当警报产生时系统采取指定的动作。

调度:

1.调度是用户定义的一个时间计划安排。
2.在将来某一时刻来临,系统自动检测它并启动其相关的作业,按作业定义的步骤顺序依次执行。
3.调度可以是一次性的,也可以是周期性的。

作业权限:

1.通常情况下,作业的管理是由DBA管理员维护,普通用户是没有管理作业的权限。
2.普通用户拥有作业管理的权限(创建、配置、调度):GRANT ADMIN JOB TO <用户名>;


1.1.2 初始化作业系统环境

达梦数据库安装完成之后默认是没有创建DBMS_JOB系统包,如要使用DBMS_JOB系统包需要手工创建。
void SP_INIT_JOB_SYS( CREATE_FLAG INT )
CREATE_FLAG为1时表示创建DBMS_JOB包;为0表示删除该系统包。
(创建 SYSJOB 模式及11张系统表、DBMS_JOB系统包): SP_INIT_JOB_SYS(1)
在这里插入图片描述
在这里插入图片描述


1.1.3 作业管理(创建/修改/删除)

创建作业(创建作业成功,插入一条相应记录到SYSJOBS表中,此时它还属于一个空作业,需添加作业步骤加以实现具体过程):

SP_CREATE_JOB (
 JOB_NAME  VARCHAR(128),          -- 作业名称,不能重名,不能是DM关键字。
 ENABLED INT,                     -- 作业启用开关。1表示打开,0表示关闭。
 ENABLE_EMAIL INT,                -- 是否启用邮件系统。1表示启用,会将作业相关日志以邮件形式发送到操作员。
 EMAIL_OPTR_NAME VARCHAR(128),    -- 指定邮件通知的操作员名称。创建时检测该操作员的存在,不存在则报错。
 EMAIL_TYPE INT,                  -- 触发发送邮件的条件。0表示作业执行成功后发送;1表示作业执行失败后发送;2表示作业执行结束后发送。
 ENABLED_NETSEND INT,             -- 作业是否开启网络发送。1表示开启,会将该作业的相关日志通过网络发送给操作员。0表示不开启则不会通知操作员。
 NETSEND_OPTR_NAME  VARCHAR(128), -- 网络通知指定的操作员。
 NETSEND_TYPE  INT,               -- 触发网络发送通知消息的条件(与EMAIL_TYPE一样)。
 DESCRIBE  VARCHAR(8187)         -- 作业备注信息
)

注意:网络发送功能只有WINDOWS早期版本上才支持如(比如 WIN 2000/XP),且一定要开启 MESSAGER
服务。WINDOWS7、8 系统因为已取消MESSAGER服务,所以该功能也不支持。

-- 创建一个TEST作业并启用它,关闭作业执行情况的邮件和网络通知。
SP_CREATE_JOB('TEST', 1, 0, NULL, 2, 0, NULL, 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('TEST', 0, 0, '', 2, 0, '', 2, '禁用TEST作业');
SP_JOB_CONFIG_START('TEST');
SP_JOB_CONFIG_COMMIT('TEST'); -- 相当于commit事务

删除作业:

SP_DROP_JOB (
JOB_NAME VARCHAR(128)
)

删除一个作业,系统同时将与这个作业相关联的所有对象都删除(包括步骤、调度等)。 即:会分别从作业表 SYSJOBSTEPS 以及
SYSSCHEDULES 中删除属于这个作业的步骤及调度。
eg: SP_DROP_JOB(‘TEST’);


1.1.4 作业配置(增加/修改/删除)

开始作业配置
注意:
1.不支持在设置DML自动提交(例如,DIsql 中设置 SET AUTO ON )的会话上配置作业 。
2.开始作业配置之后到结束作业配置之前这段时间,当前会话会处于作业配置状态。
作业配置状态不允许做任何的创建、修改、删除对象(作业、操作员、警报)的操作。
3.在DM作业配置过程中,如果配置出现错误时,可以直接使用 ROLLBACK 将错误的配置回滚
到 SP_JOB_CONFIG_START刚执行的状态,因为在这个过程执行时会自动提交前面所做的操作。

SP_JOB_CONFIG_START (
 JOB_NAME VARCHAR(128) -- 作业名称
)

添加作业步骤:

SP_ADD_JOB_STEP (
 JOB_NAME  VARCHAR(128), -- 作业名称,必须是SP_JOB_CONFIG_START函数前面指定的名称。
 STEP_NAME VARCHAR(128), -- 作业步骤名,同一作业不能存在同名的步骤名称。
 TYPE INT,               -- 步骤类型。
 /*
 0 表示执行一段SQL语句或者是语句块。
 1 表示执行基于V1.0版本的备份还原(没有WITHOUT LOG和PARALLEL 选项)。
 2 表示重组数据库。
 3 表示更新数据库的统计信息。
4 表示执行DTS(数据迁移)。
5 表示执行基于V1.0 版本的备份还原(有WITHOUT LOG和PARALLEL 选项)。
6 表示执行基于V2.0 版本的备份还原。 
 */
 COMMAND VARCHAR(8187),  -- 它不能为空,在不同步骤类型下,运行时所执行的语句。
 /*
 TYPE=0 -> 执行SQL语句或语句块,多个语句之间用英文分号隔开。不支持多条DDL语句一起执行。
 TYPE=1 -> 指定一个备份字符串。[备份模式][备份压缩类型][base_dir,…,base_dir|bakfile_path]
    备份模式:0表示完全备份,1表示增量备份。
    备份压缩类型:0表示不压缩,1表示压缩。
    base_dir:备份文件的路径。对于增量备份,必须先为其指定一个或多个基备份路径,每个路径之间用英文逗号分隔。
    bakfile_path:基备份路径与备份路径之间需使用英文竖线'|'隔开。
                  如果不指定备份路径,可以省略英文竖线,由系统根据bak_path参数自动生成一个备份路径。
     如:01E:\base_bakdir1,base_bakdir2|bakdir             
 TYPE=[2|3|4] -> 系统内部根据不同类型生成的不同的语句或存储过程。  
 TYPE=5 ->指定一个v1版本备份字符串。(有WITHOUT LOG和PARALLEL选项)。
   [备份模式][备份压缩类型][备份日志类型][备份并行类型][预留][base_dir,…,base_dir|bakfile_path|parallel_file]
   备份模式:0表示完全备份,1表示增量备份。
   备份压缩类型:0表示不压缩,1表示压缩。   
   备份日志类型:0表示不备份日志,1表示备份日志。 
   备份并行类型:0表示普通备份,1表示并行备份,并行备份映射放到最后,以'|'分隔。 
   预留:表示保留字符(目前无实际意义),用0填充。 
   base_dir:备份文件的路径。对于增量备份,必须先为其指定一个或多个基备份路径,每个路径之间用英文逗号分隔。
   bakfile_path:基备份路径与备份路径之间需使用英文竖线'|'隔开。
                  如果不指定备份路径,可以省略英文竖线,由系统根据bak_path参数自动生成一个备份路径。
   parallel_file:并行映射文件。   
   如: 01000E:\base_bakdir1,base_bakdir2|bakdir|parallel_file_path
 TYPE=6 -> v2版本备份的字符串。
  [备份模式][备份压缩类型][备份日志类型][备份并行数][USEPWR][MAXPIECESIZE][RESV1][RESV2][base_dir,…,base_dir|bakfile_dir]
   备份模式:0表示完全备份,1表示增量备份,3表示归档备份。
   备份压缩类型:0表示不压缩,1表示压缩。   
   备份日志类型:0表示不备份日志,1表示备份日志。
   备份并行数:取值[0,9]。0表示不进行并行备份,1表示并行数的默认值为4。 
   USEPWR:取值{0,1}表示并行备份时,是否使用USE PWR优化增量备份。(只是语法支持,没有实际作用)                  
   MAXPIECESIZE:表示备份片大小的上限。0表示默认值。取值[1,9]表示备份片大小。 1表示128M,9表示32G。                                         
   RESV1:表示是否在备份完归档后,删除备份的归档文件。0 不删除, 1 删除。
   RESV2:表示保留字符,用0填充。                                                                                                                                                                  
 */
 SUCC_ACTION INT, -- 步骤执行成功后,下一步该做什么事。0 表示执行下一步。1 表示报告执行成功,并执行下一步。
 FAIL_ACTION INT, -- 步骤执行失败后,下一步该做什么事。0 表示执行下一步。2 表示报告执行失败,并结束作业。
 RETRY_ATTEMPTS INT, -- 表示当步骤执行失败后,需要重试的次数。取值[0,100] 次。
 RETRY_INTERVAL INT, -- 表示在每两次步骤执行重试之间的间隔时间。不能大于10秒钟。
 OUTPUT_FILE_PATH VARCHAR(256), -- 表示步骤执行时输出文件的路径。该参数已废弃,没有实际意义。
 APPEND_FLAG INT -- 输出文件的追写方式。如果指定输出文件,那么这个参数表示在写入文件时是否从文件末尾开始追写。
                 -- 1 是;0 否。
                 -- 如果是0,那么从文件指针当前指向的位置开始追写。
)
eg:
SP_CREATE_JOB('TEST',1,0,'',2,0,'',2,'测试作业');
SP_ADD_JOB_STEP('TEST','STEP1',0,'SELECT SYSDATE FROM DUAL;',0,2,2,1,NULL,0);

在这里插入图片描述

修改步骤:(参数同上)

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_DROP_JOB_STEP删除步骤时,参数JOB_NAME必须是SP_JOB_CONFIG_START
函数调用时指定的作业名, 否则系统会报错,同时系统会检测这个作业是否存在,不存在也会报错。

SP_DROP_JOB_STEP (
 JOB_NAME  VARCHAR(128), -- 作业名称
 STEP_NAME  VARCHAR(128) -- 作业步骤名称
)
eg: 
SP_JOB_CONFIG_START('TEST');
SP_DROP_JOB_STEP('TEST', 'STEP1');
SP_JOB_CONFIG_COMMIT('TEST');

提交作业配置:

SP_JOB_CONFIG_COMMIT (
  JOB_NAME VARCHAR(128)  -- 作业名称
)
-- 将配置的作业加入到运行队列当中。

注意:
在配置过程中,可以对指定的作业增加、删除任意多个调度、步骤,但’不要做提交操作以及自动提交操作,否则可能会出现作业配置不完整的问题’。


1.1.5 作业调度

作业调度相当于一个日程表,按指定的时间计划规则执行一系列工作任务。作业调度是由达梦数据库中的定时器线程维护。
增加调度:

SP_ADD_JOB_SCHEDULE (
 JOB_NAME  VARCHAR(128), -- 作业名称
 SCHEDULE_NAME  VARCHAR(128), -- 调度名称
 ENABLE INT, -- 是否启用调度。1:启用。 0:禁用。
 TYPE  INT,  -- 调度类型。
 /*
 0 表示指定作业只执行一次。其执行时间由下面的参数 DURING_START_DATE 指定。
 1 按天的频率来执行。
 2 按周的频率来执行。
3 在一个月的某一天执行。
4 在一个月的第一周第几天执行。
5 在一个月的第二周的第几天执行。
6 在一个月的第三周的第几天执行。
7 在一个月的第四周的第几天执行。
8 在一个月的最后一周的第几天执行。 
 */ 
 FREQ_INTERVAL  INT, -- 频率间隔时间
/*
 FREQ_INTERVAL与TYPE有关。表示不同调度类型下的发生频率。
 TYPE=0 -> 这个值无效,系统不做检查。
 TYPE=1 -> 表示每几天执行,取值范围为 1~100。
 TYPE=2 -> 表示的是每几个星期执行,取值范围没有限制。
 TYPE=3 -> 表示每几个月中的某一天执行,取值范围没有限制。
 TYPE=4 -> 表示每几个月的第一周执行,取值范围没有限制。
 TYPE=5 -> 表示每几个月的第二周执行,取值范围没有限制。
 TYPE=6 -> 表示每几个月的第三周执行,取值范围没有限制。
 TYPE=7 -> 表示每几个月的第四周执行,取值范围没有限制。
 TYPE=8 -> 表示每几个月的最后一周执行,取值范围没有限制。
*/ 
 FREQ_SUB_INTERVAL  INT,
 /*
 与 TYPE 和 FREQ_INTERVAL 有关。
 表示不同TYPE的执行频率,在FREQ_INTERVAL基础上,继续指定更为精准的频率。
 TYPE= {0,1} -> '这个值无效,系统不做检查'TYPE=2 -> 表示的是某一个星期的星期几执行,可以同时选中七天中的任意几天。取值范围 1~127。
  每周有七天,DM数据库系统内部用七位二进制来表示选中的日子。
  从'最低位开始'算起,依次表示周日、周一...周五、周六。选中周几,就将该位置 1,否则 0。
  例如,选中周二和周六,7位二进制就是 1000100,转化成十进制就是 68,所以FREQ_SUB_INTERVAL取值68。
 TYPE=3 -> 表示将在一个月的第几天执行。取值范围 1~31。
 TYPE= {4,5,6,7,8} -> 表示将在某一周内第几天执行。取值范围 1~7,分别表示从周一到周日。
 */
 FREQ_MINUTE_INTERVAL  INT, -- 表示一天内每隔多少分钟执行一次。'有效值范围1~1440',单位分钟。
 STARTTIME  VARCHAR(128),   -- 定义作业被调度的起始时间。必须是有效的时间字符串,不可以为空
 ENDTIME VARCHAR(128),      --定义作业被调度的结束时间。可以为空。但如果不为空,指定的必须是
                             有效的时间字符串,同时必须要在 STARTTIME 时间之后。
 DURING_START_DATE  VARCHAR(128), -- 指定作业被调度的起始日期。必须是有效的日期字符串,不可以为空。
 DURING_END_DATE VARCHAR(128), -- 指定作业被调度的结束日期。可以为空,DURING_END_DATE 和ENDTIME 都为空,
                               调度活动会一直持续下去。但如果不为空,必须是有效的日期字符串,
                               同时必须是在DURING_START_DATE日期之后。
 DESCRIBE  VARCHAR(500) -- 调度注释信息
)

注意:FREQ_MINUTE_INTERVAL开启后, STARTTIME和ENDTIME表示起止有效时间段内的重复执行的时间频度。 关闭的话,结束时间就算指定了也无效。

eg:TEST作业立即执行一次。
SET TIME ZONE '+8:00'; -- 设置当前会话的时区
SP_ALTER_JOB_SCHEDULE('TEST','TEST_SCH1',1,0,0,0,1,CURTIME,NULL,CURDATE,NULL,'TEST时间调度');
SELECT * FROM SYSJOB.DBA_JOBS_RUNNING; -- 查看正在执行的作业。
SELECT * FROM SYSJOB.DBA_JOBS;

修改调度:(参数同上)

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)
)

删除调度:

PS:删除调度必须是在配置作业开始后才能进行,否则系统会报错,这样处理主要是为了保证作业配置的完整性。

SP_DROP_JOB_SCHEDULE (
 JOB_NAME  VARCHAR(128),
 SCHEDULE_NAME  VARCHAR(128)
)

eg:删除TEST作业上的调度TEST_SCH1。
SP_JOB_CONFIG_START('TEST');
SP_DROP_JOB_SCHEDULE('TEST', 'TEST_SCH1');
SP_JOB_CONFIG_COMMIT('TEST');

清除作业日志记录

(目的:清理过时日志,释放磁盘空间):

SP_JOB_CLEAR_HISTORIES (
 JOB_NAME VARCHAR(128)
)
-- 清除表SYSJOBHISTORIES2、SYSSTEPHISTORIES2中的相关记录。
eg:清除TEST作业的日志记录。
SP_JOB_CLEAR_HISTORIES('TEST');

1.1.6 操作员

可以把操作员理解为企业内部管理员对数据库实例的作业系统运行的监控管理。
创建操作员:

SP_CREATE_OPERATOR (
 OPR_NAME  VARCHAR(128), -- 操作人员名称
 ENABLED INT, -- 是否打开此操作员.取值{0,1}
 EMAILADDR  VARCHAR(128), -- 操作人员的邮件地址(用于接收数据库警报事件的邮件)
 NETSEND_IP VARCHAR(128) -- 操作人员的IP地址(用于网络接收警报事件的日志),依赖操作系统依使服务
)

eg:创建一个操作人员Tony
SP_CREATE_OPERATOR('Tony',1,'tony@163.com','192.168.0.120');

修改操作员:

SP_ALTER_OPERATOR (
 OPR_NAME  VARCHAR(128),
 ENABLED INT,
 EMAILADDR  VARCHAR(128),
 NETSEND_IP VARCHAR(128)
 )

删除操作员:

SP_DROP_OPERATOR (
 OPR_NAME VARCHAR(128)
)

eg:删除操作员tony
SP_DROP_OPERATOR('Tony');


1.1.7 警报

达梦数据库允许自定义一些所需求的捕获动作(警报定义放在SYSALERTS表),当某些动作被触发时,系统会根据定义的警报条件,
将其对应产生的信息记录到指定的表(SYSALERTHISTORIES)中,方便对某些操作做到实时监控。
创建警报:

SP_CREATE_ALERT (
 NAME  VARCHAR(128), -- 警报名称
 ENABLED  INT, -- 是否启用。 取值{0,1}
 TYPE  INT, -- 警报类型。0表示发生错误时警报,1表示发生某种数据库事件时警报。
 ERRTYPE  INT,  -- 触发警报的错误和数据库事件。与参数TYPE有关。
 /*
 TYPE=0 -> 警报错误类型.ERRTYPE取值如下:
  1 常规错误;
  2 启动错误;
 3 系统错误;
 4 服务器配置错误;
 5 分析阶段错误;
 6 权限错误;
 7 运行时错误;
 8 备份恢复错误;
 9 作业管理错误;
 10 数据库复制错误;
 11 其它错误;
 12 指定错误码。 
 
 TYPE=1 -> 触发警报的数据库事件。
 1 DDL事件;2 授权回收事件;3 连接或断开数据库事件;4 数据库备份恢复事件。
 */
 ERRCODE  INT, -- 错误代码。错误码取值和参数 TYPE、ERRTYPE 相关。
 /*
 TYPE=0 -> ERRTYPE取 1~12 时,指定各种错误类型相关的错误码,ERRCODE必须是小于 0 的整数。
 TYPE=1  ERRTYPE=1,指定DDL事件的错误码,ERRCODE 取值 1~15。
   规则:ERRCODE 在 DM 数据库系统内部用四位二进制来表示它们的组合,从低位到高位依次是:CREATE、ALTER、DROP、TRUNCATE。
   1 表示指定,0表示不指定。用户输入的ERRCODE值需要转化为十进制。
   例如,指定CREATE和DROP,内部二进制表示为 0101,转化为十进制为5,所以ERRCODE值就是5。
 TYPE=1 ERRTYPE=2 指定授权回收事件的错误码,ERRCODE 取值 1、2、3。
    1表示GRANT的错误码;2表示REVOKE的错误码;3 表示GRANT 和 REVOKE的错误码。
 TYPE=1 ERRTYPE=3 指定连接事件的错误码,取值 1、2、3。
   1 表示 LOGIN的错误码;2 表示 LOGOUT 的错误码;3 表示LOGIN 和 LOGOUT 的错误码。
 TYPE=1 ERRTYPE=4 指定数据库备份恢复事件的错误码,取值 1、2、3。
    1 表示BACKUP错误码;2 表示RESTORE错误码;3 表示BACKUP和RESTORE错误码。
 */
 DELAYTIME INT, -- 警报发生后延迟多少秒通知操作员。取值[0,3600]
 /*
 DESCRIBE VARCHAR(8187) -- 注释信息
)


eg:创建a1警报.
SP_CREATE_ALERT('a1',1,0,1,-600,1,'错误警报测试');
**修改警报:**
SP_ ALTER _ALERT (
 NAME  VARCHAR(128),
 ENABLED  INT,
 TYPE  INT,
 ERRTYPE  INT,
 ERRCODE  INT,
 DELAYTIME INT,
 DESCRIBE VARCHAR(8187)
)

删除警报:

SP_DROP_ALERT (
  NAME VARCHAR(128), -- 警报名称
)

关联警报到指定操作员
有时需要将警报的执行结果通知给指定操作员。

SP_ALERT_ADD_OPERATOR (
 ALERTNAME  VARCHAR(128), -- 警报名称
 OPR_NAME  VARCHAR(128), -- 操作员名称
 ENABLEMAIL INT, -- 是否开启以邮件方式通知操作员。取值{0,1}
 ENABLENETSENT  INT -- 是否开启网络发送方式通知操作员。取值{0,1}

取消警报关联

SP_ALERT_DROP_OPERATOR (
 ALERTNAME  VARCHAR(128),  -- 警报名称
 OPR_NAME  VARCHAR(128)    -- 操作员名称
)

清除警告日志记录

SP_ALERT_DROP_HISTORIES (
 ALERTNAME VARCHAR(128)
)
-- 实质是清除SYSALERTHISTORIES表的记录。

1.1.8 综合案例

开启定时作业管理的前提须初始化代理作业环境,它会自动创建作业维护表和相关视图以及存储过程。

### 1. 初始化代理环境
SQL> sp_init_job_sys(1);

### 2. 确定sysjob模式已成功初始化,以及该模式下的12张表
SQL> select b.name "用户",b.type$,a.name "模式",a.type$
     from sysobjects a, sysobjects b
     where a.type$='SCH' and a.pid=b.id;
--------------------------------------
用户	TYPE$	模式	TYPE$
SYS	UR	SYS	SCH
SYS	UR	CTISYS	SCH
SYSDBA	UR	SYSDBA	SCH
SYSDBA	UR	SYSJOB	SCH   -- 这就是初始化代理环境后产生的SYSJOB模式
SYSAUDITOR	UR	SYSAUDITOR	SCH
SYSSSO	UR	SYSSSO	SCH

SQL> SELECT OWNER,OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS WHERE OWNER='SYSJOB' AND OBJECT_TYPE='TABLE';
--------------------------------------
SYSJOB	SYSALERTHISTORIES	TABLE
SYSJOB	SYSALERTNOTIFICATIONS	TABLE
SYSJOB	SYSALERTS	TABLE
SYSJOB	SYSJOBHISTORIES	TABLE
SYSJOB	SYSJOBHISTORIES2	TABLE
SYSJOB	SYSJOBS	TABLE
SYSJOB	SYSJOBSCHEDULES	TABLE
SYSJOB	SYSJOBSTEPS	TABLE
SYSJOB	SYSMAILINFO	TABLE
SYSJOB	SYSOPERATORS	TABLE
SYSJOB	SYSSTEPHISTORIES2	TABLE

配置数据库归档模式

定时备份数据库,必须是联机备份,并且联机备份的前提必须开启数据库归档模式。

### 1. 准备备份目录和归档目录
[dmdba@dca01 dmdata]$ mkdir -p {arch,bak}

### 2. 转换数据库状态MOUNT,即配置状态
alter database mount;

### 3. 添加归档路径、单个归档日志文件大小MB,归档空间上限
alter database add archivelog 'TYPE=LOCAL, DEST=/dm8/dmdata/arch, FILE_SIZE=256, SPACE_LIMIT=10240';

### 4. 打开归档,即dm.ini参数文件中ARCH_INI = 1
alter database archivelog;

### 5. 恢复数据库打开状态(正常对外提供服务)
alter database open;

### 6. 归档日志切换操作
SQL> alter system switch logfile;
SQL> alter database archivelog current;
SQL> alter system archive log current;
例1:每周六22:00做全量备份
### 1.创建作业(作业名、启用状态、邮件发送、信使发送、备注)
sp_create_job('JOB1',1,0,'',1,0,'',1,'周六全量备份');

### 2. 作业配置开始(可理解为手动声明事务起始点)
sp_job_config_start('JOB1');

### 3. 在指定作业中添加作业步骤(可以理解为作业中包含某个什么操作)
sp_add_job_step('JOB1','STEP1',6,'01040000/dm8/dmdata/bak',0,2,0,0,NULL,0);

### 4. 添加对指定作业添加定时调度
#sat fri thur wed tue mon sun 7位组
sp_add_job_schedule('JOB1','JOB1_SCH1',1,2,1,64,0,'22:00:00',NULL,SYSDATE,NULL,'周六晚上22:00');

### 5. 作业配置结束(提交作业修改)
sp_job_config_commit('JOB1');
例2:除每周六外其他星期23:00做增量备份
sp_create_job('JOB2',1,0,'',1,0,'',1,'除周六其余星期增量备份');
sp_job_config_start('JOB2');
sp_add_job_step('JOB2','STEP1',6,'11040000/dm8/dmdata/bak|/dm8/dmdata/bak',0,2,0,0,NULL,0);
sp_add_job_schedule('JOB2','JOB2_SCH1',1,2,1,127-64,0,'23:00:00',NULL,SYSDATE,NULL,'除周六23:00');
sp_job_config_commit('JOB2');
例3:每天定时21:30扫描清理过期备份文件
sp_create_job('JOB3',1,0,'',1,0,'',1,'清理过期一月前的备份文件');
sp_job_config_start('JOB3');
sp_add_job_step('JOB3','STEP1',0,'SF_BAKSET_BACKUP_DIR_ADD(NULL,''/dm8/dmdata/bak'');SP_DB_BAKSET_REMOVE_BATCH(NULL,SYSDATE-30);',0,2,0,0,NULL,0);
sp_add_job_schedule('JOB3','JOB3_SCH1',1,2,1,127,0,'21:30:00',NULL,SYSDATE,NULL,'每天21:30清理过期备份');
sp_job_config_commit('JOB3');
例4:每天定时21:40扫描清理过期归档日志文件
sp_create_job('JOB4',1,0,'',1,0,'',1,'清理一月前归档日志文件');
sp_job_config_start('JOB4');
sp_add_job_step('JOB4','STEP1',0,'SF_ARCHIVELOG_DELETE_BEFORE_TIME(SYSDATE-30);',0,2,0,0,NULL,0);
sp_add_job_schedule('JOB4','JOB4_SCH1',1,2,1,127,0,'21:40:00',NULL,SYSDATE,NULL,'每天21:40清理过期归档');
sp_job_config_commit('JOB4');
例5:每天定时凌晨1:00更新数据库统计信息
sp_create_job('JOB5',1,0,'',1,0,'',1,'每天定时凌晨1:00更新数据库统计信息');
sp_job_config_start('JOB5');
sp_add_job_step('JOB5','STEP1',3,'',0,2,0,0,NULL,0); -- 有待高质量的统计脚本
sp_add_job_schedule('JOB5','JOB5_SCH1',1,2,1,127,0,'01:00:00',NULL,SYSDATE,NULL,'每天定时凌晨1:00更新数据库统计信息');
sp_job_config_commit('JOB5');

1.1.9 学习心得

达梦数据库自带的作业管理系统,涉及存储过程的参数有点难记(如果内部定义宏常量,凭记忆英文单词最好),需反复应用才可记住。本人建议使用兼容DBMS_JOB、DBMS_SCHEDULE包。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
kettle作业可以通过两种常用的定时调度方法来实现。一种方法是通过编写脚本,并使用定时任务来触发作业的执行。这种方法可以并发执行同一个或多个作业,运行稳定,抗干扰能力强。然而,它可能会占用太多的kettle缓存,导致作业运行失败的问题。所以在不考虑小问题的情况下,推荐使用这种方式。\[2\] 另一种方法是使用kettle自带的作业调度功能。通过设置定时脚本,可以方便地实现kettle作业定时调度。在这种方法中,你需要确保已经搭建好了kettle环境和SQL Server环境。一旦准备就绪,你可以直接进入设置定时脚本的步骤,从而实现kettle作业定时调度。\[3\] #### 引用[.reference_title] - *1* *2* [kettle开发-作业调度-Day8](https://blog.csdn.net/qq_29061315/article/details/129401261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Kettle定时任务调度](https://blog.csdn.net/nanyangnongye/article/details/122042744)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值