我们知道归档日志备份时有时会出现如下错误:
错误号: -718,错误消息: 收集到的归档日志不连续
这时通常执行checkpoint(100)后再备份即可通过。但有的时候是历史归档缺失造成的,这时候执行chekc。下面做一个实验,把某份归档日志移走,归档全备份时报同样的错误:
如果归档日志是曾经不小心删除的,我们这时可能会不停地执行checkpoint(100),结果备份还是失败,最后开始怀疑人生。
如果是ORACLE数据库,它的归档日志文件名字是按照sequence排序的。所以可以肉眼发现哪个中间的文件丢失了。但达梦的归档日志是按照日期时间排序。我们无法知道哪个时间段有没有归档产生。
其实在ORACLE中还可以通过rman命令执行crosscheck archivelog;list expired archivelog ;快速地定位出被误删的归档。
但是在达梦目前版本中我还没有发现简单易行的方法。因此自己编写了两个脚本:
#能恢复到的最后一个归档,如果显示一条状态为ACTIVE表示不缺归档,如果有其他行表示中间有日志丢失
select ARCH_LSN,status,path from v$arch_file a
where not exists ( select * from v$arch_file b
where b.arch_seq=a.next_seq+1)
#显示最近一次备份以来是否缺失归档日志,空行代表不缺失,如果查出一行,代表这行归档日志下面缺失
select path,create_time from v$arch_file a
where not exists ( select * from v$arch_file b
where a.arch_seq=b.next_seq+1)
and arch_lsn >=(select max(begin_lsn) from v$backupset)
执行上面语句显示出,启始LSN为8259147的归档下方的文件有丢失。
把丢失文件找回后再执行备份,成功
执行下面命令检查:
SQL> select FILE_NAME from v$backupset_arch;
行号 FILE_NAME
---------- ---------------------------------------------------------------
1 /DM8/arch/ARCHIVE_LOCAL1_0x20FF03CE_EP0_2023-02-11_10-07-27.log
2 /DM8/arch/ARCHIVE_LOCAL1_0x20FF03CE_EP0_2023-02-11_10-11-32.log
3 /DM8/arch/ARCHIVE_LOCAL1_0x20FF03CE_EP0_2023-02-11_10-14-41.log
显示三个归档日志已经完成备份
再检查没有备份过的归档日志:
SQL> select * from v$arch_file
where not exists (select * from v$backupset_arch
where path=file_name)2 3
4 /
行号 DB_MAGIC STATUS LEN FREE ARCH_LSN CLSN
---------- -------------------- ------ -------------------- -------------------- -------------------- --------------------
ARCH_SEQ NEXT_SEQ CREATE_TIME CLOSE_TIME
-------------------- -------------------- -------------------------- --------------------------
PATH PMNT_MAGIC DSC_SEQNO CRC_CHECK
--------------------------------------------------------------- -------------------- ----------- -----------
LAST_PKG_OFF PREV_LSN GLOBAL_NEXT_SEQ SRC_DB_MAGIC
-------------------- -------------------- -------------------- --------------------
1 553583566 ACTIVE 67108864 28160 8261456 8261504
1109085 1109131 2023-02-11 10:53:05.569975 2023-02-11 10:53:05.569975
/DM8/arch/ARCHIVE_LOCAL1_0x20FF03CE_EP0_2023-02-11_10-53-05.log 1966004981 0 1
27648 0 1109131 553583566
这个归档日志是备份后新产生的。每次归档日志备份都触发一个日志切换操作。