最近在使用DM8做数据库联机全库备份时报错,-718 归档日志不完整,现在来分析一下这个产生的原因并找到对应的解决办法
注:我使用dm8.1.2.18
查看达梦官方的备份与还原手册,达梦的数据库物理备份是把数据文件中的有效数据页备份下来。物理备份包含数据备份和日志备份:
下面看一下 ckpt_lsn,file_lsn,begin_lsn,end_lsn究竟是什么意思,达梦是这样对lsn做的解释 ,也就是可以将lsn 简单的理解为数据库的操作量的标度,在这个标度上可以简单的衡量数据库的变化
LSN(Log Sequence Number)是由系统自动维护的 Bigint 类型数值,具有自动递增、全局唯一特性,每一个 LSN 值代表着 DM 系统内部产生的一个物理事务。物理事务(Physical Transaction,简称 ptx)是数据库内部一系列修改物理数据页操作的集合,与数据库管理系统中事务(Transaction)概念相对应,具有原子性、有序性、无法撤销等特性.
DM 数 据 库 中 与 LSN 相 关 的 信 息 , 可 以 通 过 查 询 v$RLOG 和 v$RAPPLY_PARALLEL_INFO 表来获取。 DM 主要包括以下几种类型的 LSN:
- CUR_LSN 是系统已经分配的最大 LSN 值。物理事务提交时,系统会为其分配一个唯一的 LSN 值,大小等于 CUR_LSN +
1,然后再修改 CUR_LSN=CUR_LSN+1。- FLUSH_LSN 是已经发起日志刷盘请求,但还没有真正写入联机 Redo 日志文件的最大 LSN 值。
- FILE_LSN 是已经写入联机 Redo 日志文件的最大 LSN 值。每次将 Redo 日志包 RLOG_PKG 写入联机 Redo 日志文件后,都要修改 FILE_LSN 值。
- CKPT_LSN 是检查点 LSN,所有 LSN <= CKPT_LSN 的物理事务修改的数据页,都已经从 Buffer 缓冲区写入磁盘, CKPT_LSN 由检查点线程负责调整。
达梦数据库的备份命令是这样的,其中有一个参数“without log”,这个参数就是指定备份过程中是否要进行日志备份,显然默认情况下都不会加这个参数,也就是默认情况下进行备份日志,那如果不做日志备份 还原的时候还要指定归档目录 想必会更加麻烦,还是老老实实备份日志吧。
那么执行联机备份过程中必然要备份日志,在file_lsn与ckpt_lsn中间的归档日志是一定保留在本地不能被刷掉的。如果被刷掉了,很抱歉要重来一次备份
达梦文档中给出提示,如果备份过程中报错归档不完成,执行生成检查点操作后就可以正常备份了
那么为了避免产生这样的问题,也就是file_lsn与ckpt_lsn的差值要尽量的小,这样这些归档日志就可以保留在本地不被刷掉,就不会有-718的报错了
以上就是我的个人理解了,那么如果有不同理解的欢迎评论区留言。
更多资讯请上达梦技术社区了解: https://eco.dameng.com