注册
JOB没有按备份策略自动清理备份文件,导致备份空间爆满,备份任务失败处理记录
技术分享/ 文章详情 /

JOB没有按备份策略自动清理备份文件,导致备份空间爆满,备份任务失败处理记录

吾菜 2025/06/27 49 0 0

一、环境介绍

操作系统:Kylin Linux Advanced Server
数据库版本: DM8

1、数据库备份很重要,建议将备份文件和数据文件放置在不同磁盘资源,避免磁盘损坏导致数据库和备份一起丢失;
2、请根据业务场景,合理分配数据库备份空间,备份文件的保留周期;
3、备份方式有 全库备份 或 全库备份+增量备份;
4、备份时建议勾选压缩选项,默认压缩级别 1,节省备份磁盘空间;

二、备份条件
开启数据库归档

ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG ‘DEST=/dmarch,TYPE=LOCAL,FILE_SIZE=2048,SPACE_LIMIT=204800’;
ALTER DATABASE OPEN;
CHECKPOINT(100);

三、开启代理
SP_INIT_JOB_SYS(1);

四、创建自动备份JOB
– 周六晚上22点 备份全量

call SP_CREATE_JOB(‘BACKUP_DB’,1,0,’’,0,0,’’,0,‘BACKUP_DB’);
call SP_JOB_CONFIG_START(‘BACKUP_DB’);
call SP_JOB_SET_EP_SEQNO(‘BACKUP_DB’, 0);
call SP_ADD_JOB_STEP(‘BACKUP_DB’, ‘FULLBAK’, 6, ‘00000000/dbbackup/dmdata/data/dmbak’, 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(‘BACKUP_DB’, ‘FULLBAK’, 1, 2, 1, 1, 0, ‘22:00:00’, NULL, ‘2025-06-24 22:00:00’, NULL, ‘’);
call SP_JOB_CONFIG_COMMIT(‘BACKUP_DB’);

–22点累计增量备份 周日,周一,周二,周三,周四,周五
call SP_CREATE_JOB(‘INC_BAK_DB’,1,0,’’,0,0,’’,0,‘INC_BAK_DB’);
call SP_JOB_CONFIG_START(‘INC_BAK_DB’);
call SP_ADD_JOB_STEP(‘INC_BAK_DB’, ‘INC_BAK_DB’, 6, ‘10000000/dbbackup/dmdata/data/dmbak|/dbbackup/dmdata/data/dmbak’, 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(‘INC_BAK_DB’, ‘INC_BAK_DB’, 1, 1, 1, 0, 0, ‘22:00:00’, NULL, ‘2025-06-24 22:00:00’, NULL, ‘’);
call SP_JOB_CONFIG_COMMIT(‘INC_BAK_DB’);

– 删除15天前的备份
call SP_CREATE_JOB(‘DELETE_DB_FULL_BACKUP’,1,0,’’,0,0,’’,0,‘自动删除过期备份’);
call SP_JOB_CONFIG_START(‘DELETE_DB_FULL_BACKUP’);
call SP_JOB_SET_EP_SEQNO(‘DELETE_DB_FULL_BACKUP’, 0);
call SP_ADD_JOB_STEP(‘DELETE_DB_FULL_BACKUP’, ‘自动删除过期备份’, 0, ‘CALL SP_DB_BAKSET_REMOVE_BATCH(’‘DISK’’, NOW()-15);’, 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(‘DELETE_DB_FULL_BACKUP’, ‘执行删除过期备份’, 1, 1, 1, 0, 0, ‘19:00:00’, NULL, ‘2025-02-24 11:43:11’, NULL, ‘’);
call SP_JOB_CONFIG_COMMIT(‘DELETE_DB_FULL_BACKUP’);

通过以上配置之后,数据库的日常备份任务可以正常运行,但是**通过巡检发现,超过备份策略保留时间的备份文件不会自动清理,检备清理JOB日志也是每日的正常运行,并无报错。**

那问题出在哪呢 ???

处理过程如下:

手动添加备份路径


call SF_BAKSET_BACKUP_DIR_ADD(‘DISK’,’/dbbackup/dmdata/data/dmbak’);
call SP_DB_BAKSET_REMOVE_BATCH(‘DISK’,SYSDATE-15);


通过查阅官网解释如下:
SF_BAKSET_BACKUP_DIR_ADD 添加备份目录仅对当前会话有效。调用删除备份等函数或查看动态视图时要先调用 SF_BAKSET_BACKUP_DIR_ADD 添加备份目录,否则仅搜索默认备份路径下的备份集。

如果备份的位置是自定义的,不是默认的,通过修改dm.ini默认备份路径, 需要重启数据库生效。然后通过JOB自动清理备份文件,参数如下:

vi dm.ini
BAK_PATH=/dbbackup/dmdata/data

再次手动执行

image.png

此时再进入备份目录观察发现,备份文件已按照策略清理过期的备份对象。

image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服