做达梦数据库运维时,手动执行清理、备份这些重复操作不仅累,还容易忘!用「作业(Job)」就能实现自动化。
今天整理了5个生产环境最常用的作业模板,复制替换参数就能跑,新手也能轻松上手!
所有模板支持「DM Manager 图形化」和「SQL 命令行」,图形化操作只需填名称、粘 SQL、设调度时间即可。
记住这个黄金流程:创建作业 → 开启配置 → 加步骤 → 加调度 → 提交配置 → 启动作业
业务日志表会越存越大,拖慢查询速度,每天凌晨低峰期清理历史数据是必备操作。
-- 1. 创建空作业
call SP_CREATE_JOB('JOB_CLEAN_OPER_LOG', 1, 0, '', 0, 0, '', 0, '清理3个月前操作日志');
-- 2. 开启作业配置模式
call SP_JOB_CONFIG_START('JOB_CLEAN_OPER_LOG');
-- 3. 添加清理步骤(0=执行SQL语句)
call SP_ADD_JOB_STEP('JOB_CLEAN_OPER_LOG', 'TASK_CLEAN', 0,
'DELETE FROM DMHR.USER_OPER_LOG WHERE OPER_TIME < ADD_MONTHS(SYSDATE, -3);
COMMIT;', -- 清理3个月前日志并提交事务
0, 0, 0, 0, NULL, 0);
-- 4. 添加调度(每日凌晨2点执行:1=循环调度,1=日周期)
call SP_ADD_JOB_SCHEDULE('JOB_CLEAN_OPER_LOG', 'SCHEDULE_DAILY_2AM', 1, 1, 1, 0, 0, '02:00:00', NULL, SYSDATE, NULL, '');
-- 5. 提交配置(让配置生效)
call SP_JOB_CONFIG_COMMIT('JOB_CLEAN_OPER_LOG');
-- 6. 启动作业(开始执行调度)
call SP_JOB_CONFIG_START('JOB_CLEAN_OPER_LOG');
提示:如果日志表数据量极大,建议加 LIMIT 分批删除,避免锁表影响业务。
数据备份是运维底线!全量备份+增量备份组合,既保证数据完整,又节省存储空间。
-- 1. 创建作业
call SP_CREATE_JOB('JOB_FULL_BACKUP', 1, 0, '', 0, 0, '', 0, '每周日全量备份');
-- 2. 开启配置
call SP_JOB_CONFIG_START('JOB_FULL_BACKUP');
-- 3. 添加备份步骤(调用达梦内置备份存储过程)
call SP_ADD_JOB_STEP('JOB_FULL_BACKUP', 'TASK_FULL', 0,
'CALL SP_DATABASE_BACKUP(''BACKUP_PATH=/dm/backup'', -- 备份存放在这个路径
''BACKUP_TYPE=FULL'', -- 全量备份类型
''COMPRESS=1'');', -- 开启压缩节省空间
0, 0, 0, 0, NULL, 0);
-- 4. 调度:每周日3点(1=循环调度,1=日周期,通过条件限定周日)
call SP_ADD_JOB_SCHEDULE('JOB_FULL_BACKUP', 'SCHEDULE_WEEKLY_SUN', 1, 1, 1, 0, 0, '03:00:00', NULL, SYSDATE, NULL, 'TO_CHAR(SYSDATE,''D'')=''1''');
-- 5. 提交+启动
call SP_JOB_CONFIG_COMMIT('JOB_FULL_BACKUP');
call SP_JOB_CONFIG_START('JOB_FULL_BACKUP');
-- 1. 创建作业
call SP_CREATE_JOB('JOB_INCR_BACKUP', 1, 0, '', 0, 0, '', 0, '每日增量备份');
-- 2. 开启配置
call SP_JOB_CONFIG_START('JOB_INCR_BACKUP');
-- 3. 增量备份步骤
call SP_ADD_JOB_STEP('JOB_INCR_BACKUP', 'TASK_INCR', 0,
'CALL SP_DATABASE_BACKUP(''BACKUP_PATH=/dm/backup'',
''BACKUP_TYPE=INCR'', -- 增量备份
''COMPRESS=1'');',
0, 0, 0, 0, NULL, 0);
-- 4. 调度:每日2点,周日不执行(条件:TO_CHAR(SYSDATE,''D'')<>''1'')
call SP_ADD_JOB_SCHEDULE('JOB_INCR_BACKUP', 'SCHEDULE_DAILY_2AM', 1, 1, 1, 0, 0, '02:00:00', NULL, SYSDATE, NULL, 'TO_CHAR(SYSDATE,''D'')<>''1''');
-- 5. 提交+启动
call SP_JOB_CONFIG_COMMIT('JOB_INCR_BACKUP');
call SP_JOB_CONFIG_START('JOB_INCR_BACKUP');
主备集群是高可用核心,通过1秒一次的心跳事务,能实时监控主备同步延迟,延迟过高及时告警。
-- 第一步:先创建心跳表(主库执行,主备自动同步)
CREATE TABLE DMHR.DM_HA_HEARTBEAT (
ID INT PRIMARY KEY DEFAULT 1,
MASTER_TIME TIMESTAMP(6), -- 主库事务提交时间(毫秒级)
SLAVE_TIME TIMESTAMP(6) -- 备库重演时间(备库触发器更新)
);
/
-- 第二步:主库创建心跳作业(高频调度实现每秒执行)
-- 1. 创建作业
call SP_CREATE_JOB('JOB_HA_HEARTBEAT', 1, 0, '', 0, 0, '', 0, '主备心跳事务(每秒执行)');
-- 2. 开启配置模式
call SP_JOB_CONFIG_START('JOB_HA_HEARTBEAT');
-- 3. 核心步骤:仅执行心跳更新(不包含延迟,通过调度频率控制间隔)
call SP_ADD_JOB_STEP('JOB_HA_HEARTBEAT', 'TASK_HEART_BEAT', 0,
'BEGIN
-- 仅主库执行心跳更新(DATABASE_STATUS=0为主库状态)
IF (SELECT DATABASE_STATUS FROM V$INSTANCE) = 0 THEN
MERGE INTO DMHR.DM_HA_HEARTBEAT HB
USING (SELECT 1 AS ID, SYSTIMESTAMP AS MASTER_TIME FROM DUAL) T
ON (HB.ID = T.ID)
WHEN MATCHED THEN UPDATE SET HB.MASTER_TIME = T.MASTER_TIME
WHEN NOT MATCHED THEN INSERT (ID, MASTER_TIME) VALUES (T.ID, T.MASTER_TIME);
COMMIT;
END IF;
END;',
0, 0, 0, 0, NULL, 0);
-- 4. 调度配置(每秒调度1次)
-- 参数说明:1=循环调度,1=日周期,00:00:01=起始时间,无结束时间
call SP_ADD_JOB_SCHEDULE('JOB_HA_HEARTBEAT', 'SCHEDULE_1S_LOOP', 1, 1, 1, 0, 0, '00:00:01', NULL, SYSTIMESTAMP, NULL, '');
-- 5. 提交配置并启动作业
call SP_JOB_CONFIG_COMMIT('JOB_HA_HEARTBEAT');
call SP_JOB_CONFIG_START('JOB_HA_HEARTBEAT');
-- 第三步:备库执行触发器
CREATE TRIGGER TRG_HA_HEARTBEAT_SLAVE
BEFORE UPDATE ON DMHR.DM_HA_HEARTBEAT FOR EACH ROW
BEGIN
:NEW.SLAVE_TIME := SYSTIMESTAMP;
END;
/
数据库执行计划依赖统计信息,如果统计信息过时,会导致查询变慢。每日收集一次最省心。
-- 1. 创建作业
call SP_CREATE_JOB('JOB_ANALYZE_STATS', 1, 0, '', 0, 0, '', 0, '收集表统计信息');
-- 2. 开启配置
call SP_JOB_CONFIG_START('JOB_ANALYZE_STATS');
-- 3. 收集统计信息步骤
call SP_ADD_JOB_STEP('JOB_ANALYZE_STATS', 'TASK_ANALYZE', 0,
'BEGIN
-- 调用达梦内置存储过程收集所有用户表统计信息
CALL SP_ANALYZE_TABLE_ALL(''USER_TABLES'');
END;',
0, 0, 0, 0, NULL, 0);
-- 4. 调度:每日凌晨1点(业务低峰期)
call SP_ADD_JOB_SCHEDULE('JOB_ANALYZE_STATS', 'SCHEDULE_DAILY_1AM', 1, 1, 1, 0, 0, '01:00:00', NULL, SYSDATE, NULL, '');
-- 5. 提交+启动
call SP_JOB_CONFIG_COMMIT('JOB_ANALYZE_STATS');
call SP_JOB_CONFIG_START('JOB_ANALYZE_STATS');
归档日志会持续占用磁盘空间,不清理容易导致磁盘满挂,建议保留7天足够故障恢复。
-- 1. 创建作业
call SP_CREATE_JOB('JOB_CLEAN_ARCH', 1, 0, '', 0, 0, '', 0, '清理归档日志');
-- 2. 开启配置
call SP_JOB_CONFIG_START('JOB_CLEAN_ARCH');
-- 3. 清理步骤(3=执行操作系统命令,Linux环境)
call SP_ADD_JOB_STEP('JOB_CLEAN_ARCH', 'TASK_CLEAN_ARCH', 3,
'find /dm/arch -name "*.arc" -mtime +7 -delete;', -- 删除7天前.arc归档文件
0, 0, 0, 0, NULL, 0);
-- 4. 调度:每日凌晨2点30分
call SP_ADD_JOB_SCHEDULE('JOB_CLEAN_ARCH', 'SCHEDULE_DAILY_230AM', 1, 1, 1, 0, 0, '02:30:00', NULL, SYSDATE, NULL, '');
-- 5. 提交+启动
call SP_JOB_CONFIG_COMMIT('JOB_CLEAN_ARCH');
call SP_JOB_CONFIG_START('JOB_CLEAN_ARCH');
Windows环境替换步骤命令:forfiles /p "D:\dm\arch" /m *.arc /d -7 /c "cmd /c del @path"
配置完作业后,一定要验证是否正常运行,这两个命令帮你快速排查问题:
查看所有作业信息:
SELECT * FROM SYSOBJECTS;
查看作业执行历史(看是否成功,失败原因是什么):
SELECT * FROM SYSJOBHISTORY;
这5个作业覆盖了达梦数据库运维的核心场景,记住**"创建→开启配置→加步骤→加调度→提交→启动"**的固定流程。实际使用时,只需替换表名、路径、时间等参数,新手也能实现自动化运维,解放双手!
文章
阅读量
获赞
