达梦-作业定时任务

1、定时备份数据库

在备份数据库前需要开启归档日志方可备份数据库。

开启归档如下:

alter DATABASE MOUNT;
alter DATABASE ARCHIVELOG;
alter database add archivelog 'DEST=/opt/dmdbms/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=64, SPACE_LIMIT=0';
alter DATABASE open;

启动代理

SP_INIT_JOB_SYS(1);

设置每周日、周三 23:00进行全库备份,2020年10月10日00:00开始执行。

call SP_CREATE_JOB('JOB1',1,0,'',0,0,'',0,'');

call SP_JOB_CONFIG_START('JOB1');

call SP_ADD_JOB_STEP('JOB1', 'JOB11', 5, '01000/opt/dmdbms/data/backup', 1, 2, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('JOB1', 'JOB111', 1, 2, 1, 9, 0, '23:00:00', NULL, '2020-10-10 00:00:00', NULL, '');

call SP_JOB_CONFIG_COMMIT('JOB1');

设置每周一、周二、周四、周五、周六23:00 进行增量备份,2020年10月10日00:00开始执行。 备份路径:/opt/dmdbms/data/backup 备份基路径:/opt/dmdbms/data/backup

call SP_CREATE_JOB('JOB2',1,0,'',0,0,'',0,'');

call SP_JOB_CONFIG_START('JOB2');

call SP_ADD_JOB_STEP('JOB2', 'JOB22', 5, '11000/opt/dmdbms/data/backup|/opt/dmdbms/data/backup', 1, 2, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('JOB2', 'JOB222', 1, 2, 1, 118, 0, '23:00:00', NULL, '2020-10-10 00:00:00', NULL, '');

call SP_JOB_CONFIG_COMMIT('JOB2');
2、定时删除数据库备份

达梦7数据库使用的删除备份系统过程如下:

SP_BATCH_DEL_BAK(''DAMENG'', '''', 1, sysdate-15, -1);

达梦8数据库使用的删除备份系统过程如下:

SP_DB_BAKSET_REMOVE_BATCH('DISK', NOW()-15);

达梦7配置定时删除备份任务如下:

每周日00:05执行删除15天以前的备份,2020年10月10日00:00开始执行。

call SP_CREATE_JOB('JOB_DEL_BAK_TIMELY',1,0,'',0,0,'',0,'定时删除备份');

call SP_JOB_CONFIG_START('JOB_DEL_BAK_TIMELY');

call SP_ADD_JOB_STEP('JOB_DEL_BAK_TIMELY', 'STEP_DEL_BAK', 0, 'SP_BATCH_DEL_BAK(''DAMENG'', '''', 1, sysdate-15, -1);', 1, 2, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('JOB_DEL_BAK_TIMELY', 'SCHEDULE_DEL_BAK', 1, 2, 1, 1, 0, '00:05:56', NULL,  '2020-10-10 00:00:00', NULL, '');

call SP_JOB_CONFIG_COMMIT('JOB_DEL_BAK_TIMELY');

达梦8配置定时删除备份任务如下:

每周日00:05执行删除15天以前的备份,2020年10月10日00:00开始执行。

call SP_CREATE_JOB('JOB_DEL_BAK_TIMELY',1,0,'',0,0,'',0,'定时删除备份');

call SP_JOB_CONFIG_START('JOB_DEL_BAK_TIMELY');

call SP_ADD_JOB_STEP('JOB_DEL_BAK_TIMELY', 'JOB_DEL_BAK_TIMELY', 0, 'SP_DB_BAKSET_REMOVE_BATCH(''DISK'', NOW()-15);', 1, 2, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('JOB_DEL_BAK_TIMELY', 'SCHEDULE_DEL_BAK', 1, 2, 1, 1, 0, '00:05:56', NULL, '2020-10-10 00:00:00', NULL, '');

call SP_JOB_CONFIG_COMMIT('JOB_DEL_BAK_TIMELY');
3、定时删除归档日志

每周日00:05执行删除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');
<think>好的,我现在需要介绍达梦数据库中的定时任务功能。首先,用户之前询问了TO_CHAR函数,现在转向定时任务,可能需要了解如何自动化执行任务,比如数据备份、报表生成等。达梦定时任务应该类似于其他数据库的作业调度,比如Oracle的DBMS_SCHEDULER或者MySQL的事件。我需要确定达梦的具体实现方式。 首先,我应该回忆达梦数据库的文档结构,是否有专门的章节介绍任务调度。记得达梦可能使用DBMS_JOB或类似包来管理作业。需要确认正确的包名和用法。另外,用户可能需要知道如何创建、修改、删除定时任务,以及查看任务状态。 接下来,要分步骤介绍,确保结构清晰。包括概述、创建任务、设置调度时间、管理任务(启用/禁用/删除)、查看任务日志等。同时要注意语法正确,比如使用DBMS_JOB.SUBMIT或其他相关过程。 还需要考虑示例,帮助用户理解如何实际应用。比如创建一个每天备份的作业,或者每小时清理日志的任务。同时提醒注意事项,比如权限问题、任务间隔设置、依赖关系等。 可能用户会遇到的问题,比如任务不执行,需要检查任务状态、日志,或者调度时间是否正确。这部分可以作为注意事项或常见问题。 需要确认达梦是否支持CRON表达式,或者使用自己的调度语法,比如间隔时间用PL/SQL表示。例如,SYSDATE + 1表示每天执行。 最后,对比其他数据库的定时任务,帮助用户迁移或理解差异。比如和Oracle的DBMS_SCHEDULER相比,达梦的可能更简化,或者语法不同。 需要确保使用中文,避免专业术语错误,并保持口语化,但因为是技术文档,需要准确。同时检查是否有Markdown格式,根据用户之前的回复,可能不需要使用,但按用户当前要求,可能不需要使用,但原思考过程应自然。</think>以下是关于达梦数据库 **定时任务** 的详细介绍,分步骤说明其核心功能、使用方法及实际场景: --- ### 一、定时任务概述 达梦数据库的定时任务(Job Scheduler)用于 **自动化执行预定义的数据库操作**,例如: - 定期备份数据 - 清理历史日志 - 生成统计报表 - 数据归档或迁移 核心特点: - 基于 **DBMS_JOB** 或 **DBMS_SCHEDULER** 包实现(不同版本可能有差异)。 - 支持灵活的时间调度(如每天、每周、特定时间点)。 - 可通过 SQL 或管理工具(如 DM Management Tool)配置。 --- ### 二、定时任务核心操作步骤 #### 1. **创建定时任务** 使用 `DBMS_JOB.SUBMIT` 存储过程: ```sql DECLARE job_id NUMBER; BEGIN DBMS_JOB.SUBMIT( job => job_id, -- 任务ID(自动生成) what => '存储过程或SQL语句', -- 执行内容 next_date => SYSDATE, -- 首次执行时间 interval => 'SYSDATE + 1' -- 执行间隔(如每天执行) ); COMMIT; END; ``` **示例**:每天凌晨1点清理日志表 ```sql DECLARE job_id NUMBER; BEGIN DBMS_JOB.SUBMIT( job_id, 'DELETE FROM sys_log WHERE log_time < SYSDATE - 7;', -- 删除7天前的日志 TRUNC(SYSDATE) + 1/24, -- 次日1点执行 'TRUNC(SYSDATE) + 1' -- 每天重复 ); COMMIT; END; ``` #### 2. **修改任务属性** - **调整执行时间**: ```sql DBMS_JOB.NEXT_DATE(job_id, TRUNC(SYSDATE) + 2/24); -- 修改为凌晨2点 ``` - **变更执行逻辑**: ```sql DBMS_JOB.WHAT(job_id, 'CALL backup_procedure();'); -- 更改为调用备份存储过程 ``` #### 3. **启停任务** - **暂停任务**: ```sql DBMS_JOB.BROKEN(job_id, TRUE); -- 设置任务为“中断”状态 ``` - **恢复任务**: ```sql DBMS_JOB.BROKEN(job_id, FALSE, TRUNC(SYSDATE) + 1/24); -- 恢复并设置下次执行时间 ``` #### 4. **删除任务** ```sql DBMS_JOB.REMOVE(job_id); ``` --- ### 三、时间间隔参数详解 通过 `interval` 参数控制执行频率,支持表达式或日期函数: | 场景 | 示例表达式 | 说明 | |----------------------|-------------------------|-------------------------------| | 每分钟执行 | `SYSDATE + 1/1440` | 1天=1440分钟 | | 每小时执行 | `SYSDATE + 1/24` | 1天=24小时 | | 每天固定时间执行 | `TRUNC(SYSDATE) + 1` | 每天00:00 + 1天 → 次日00:00 | | 每周一执行 | `NEXT_DAY(TRUNC(SYSDATE), ''MONDAY'') + 8/24` | 每周一上午8点 | | 每月1日执行 | `TRUNC(LAST_DAY(SYSDATE)) + 1 + 3/24` | 每月1日凌晨3点 | --- ### 四、查看任务状态 查询系统表 `SYSJOB` 或 `DBA_JOBS`: ```sql SELECT job, log_user, next_date, interval, what FROM SYSJOB; ``` --- ### 五、注意事项 1. **权限要求**:需具备 `DBA` 权限或 `CREATE JOB` 权限。 2. **事务控制**:任务中的SQL默认自动提交,需显式控制事务(如 `BEGIN ... COMMIT;`)。 3. **日志监控**:通过 `V$JOB` 动态视图或数据库日志跟踪任务执行情况。 4. **资源占用**:避免高频任务导致性能问题(如秒级任务需谨慎设置)。 --- ### 六、典型应用场景 1. **数据备份** ```sql -- 每周日凌晨2点全库备份 DBMS_JOB.SUBMIT( job_id, 'CALL FULL_BACKUP();', TRUNC(SYSDATE) + (6 - TO_CHAR(SYSDATE, 'D')) + 2/24, 'TRUNC(SYSDATE) + 7' ); ``` 2. **报表生成** ```sql -- 每月1日上午8点生成销售报表 DBMS_JOB.SUBMIT( job_id, 'INSERT INTO sales_report SELECT ...;', TRUNC(SYSDATE, 'MM') + 8/24, 'TRUNC(LAST_DAY(SYSDATE)) + 1 + 8/24' ); ``` --- ### 七、与 Oracle 的差异 | 特性 | 达梦(DBMS_JOB) | Oracle(DBMS_SCHEDULER) | |--------------|------------------------|-----------------------------------| | **包名** | `DBMS_JOB` | `DBMS_SCHEDULER` | | **功能粒度** | 基础任务调度 | 支持任务链、依赖关系、资源限制等 | | **时间语法** | 基于日期表达式 | 支持CRON表达式 | --- 通过合理配置定时任务,可显著提升数据库自动化管理效率,减少人工干预。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值