前言
最近在使用DM8做数据库联机全库备份时报错,-718 归档日志不完整,现在来分析一下这个产生的原因并找到对应的解决办法
注:我使用dm8.1.2.18
达梦8 全库备份相关概念
查看达梦官方的备份与还原手册,达梦的数据库物理备份是把数据文件中的有效数据页备份下来。物理备份包含数据备份和日志备份:
- 数据备份也就是拷贝有效的数据页内容
- 日志备份是拷贝备份过程中产生的redo日志,这部分日志实际上就是达梦的归档日志文件,这也就是为什么达梦的联机备份必须要开归档的原因了吧
- 通过备份数据备份和日志备份,就可以将数据库恢复到执行备份这个时间点了
下面看一下 ckpt_lsn,file_lsn,begin_lsn,end_lsn究竟是什么意思,达梦是这样对lsn做的解释 ,也就是可以将lsn 简单的理解为数据库的操作量的标度,在这个标度上可以简单的衡量数据库的变化
- begin_lsn、end_lsn:备份开始和结束的lsn值
- ckpt_lsn:检查点lsn,也就是物理备份有效数据页也的内容
- file_lsn:联机日志lsn,操作写入归档日志但是没有刷盘的数据
联机备份
达梦数据库的备份命令是这样的,其中有一个参数“without log”,这个参数就是指定备份过程中是否要进行日志备份,显然默认情况下都不会加这个参数,也就是默认情况下进行备份日志,那如果不做日志备份 还原的时候还要指定归档目录 想必会更加麻烦,还是老老实实备份日志吧。
那么执行联机备份过程中必然要备份日志,在file_lsn与ckpt_lsn中间的归档日志是一定保留在本地不能被刷掉的。如果被刷掉了,很抱歉要重来一次备份
达梦文档中给出提示,如果备份过程中报错归档不完成,执行生成检查点操作后就可以正常备份了
结论
那么为了避免产生这样的问题,也就是file_lsn与ckpt_lsn的差值要尽量的小,这样这些归档日志就可以保留在本地不被刷掉,就不会有-718的报错了
- 增大归档上限,避免在业务高峰期进行备份,增加file_lsn与ckpt_lsn的差值上限
- 提高备份的并行参数和线程数 加快备份速度,缩短备份时间,降低file_lsn与ckpt_lsn的差值下限
- 备份前执行生成检查点的操作,也就是将ckpt_lsn值刷到file_lsn附近,减少日志备份量
以上就是我的个人理解了,那么如果有不同理解的欢迎评论区留言。
更多资讯请上达梦技术社区了解: https://eco.dameng.com