启用定时备份后,数据库运行一长,必然会积累很多的备份文件,占用大量存储空间,然而时间久远的备份文件可能已经失效,不再具有保留的意义。对于占用存储空间又没有保留意义的文件,当然是清理掉比较好。
清理这种失效的备份文件的方法,Windows 下可以写批处理文件,Linux 下可以 shell 脚本。DM7 本身提供的系统过程 SP_BATCH_DEL_BAK 用于清理超期或冗余的备份文件非常好用。
下文就对 SP_BATCH_DEL_BAK 做个介绍,通过一个清理出错的场景,引出该过程的使用方法。
举例,删除当前系统时间之前,且离当前系统时间最远的 BOOKSHOP 表空间的一个备份文件:
call SP_BATCH_DEL_BAK('BOOKSHOP', '', 2, SYSDATE, 1);
注:只能删除系统目录下(dm.ini 配置的 bak_path)的备份,如果备份在其他地方就需要修改 bak_path 参数值。
上例中参数说明:
SP_BATCH_DEL_BAK 函数会连续删除指定时间节点前的 n 个备份集,前提情况是当前的备份集是连续不断的,中间没有人为删除过。
设置定时备份 job 每隔一分钟备份一次。可以看见当前备份集是连续的。然后调用函数删除当前时间的前两个备份集,这样就是会删除 15 点 51 和 15 点 52 分的备份集。
但是如果手动删除过其中某个备份文件,再执行就会出现随机删除两个备份集的情况:
可以看到执行完函数之后把 15 点 53 分和 16 点 01 分的备份集删除了,这样一来本来应该被删除的 54 分的备份集就保留了下来,之后再执行删除都会随机删除。
再仔细研究过这个函数之后发现在《DM_SQL语言使用手册》中对这个函数使用有一个备注:
即:在删除备份之前首先要构建备份链表,将各个备份文件按序排列,从而不会产生因人为删除之后导致的本来应该被删除的备份集不删除。
注:以上备注所述系统函数的具体的使用方法及作用请参考《DM_SQL语言使用手册》。
在构建完备份链表之后再调用删除备份的系统过程,结果如下:
将 54 分和 55 分的备份删除。
DM 本身提供的系统过程 SP_BATCH_DEL_BAK 可以用于清理超期或冗余的备份文件。
调用该过程前,需要先构建备份链表,避免系统统计的备份文件信息过期而造成清理错误的情况。
文章
阅读量
获赞