最近检查ASM目录发现归档日志有断档,目录里遗留了很多2019年的归档,2021年的也有一些不连续。断档的这一部分应该在控制文件中没有记录,所以这部分归档文件就一直没有被发现。这些不连续的归档日志都属于无效日志,需要清掉。
通过 asmcmd 可以查看到实际目录

其中目录中有几段都是不连续的

通过 du 可以查看是否是空目录

最近的归档日志每天有30G左右,查了以前的目录有近110G。这些断档的目录,通过rman查看在控制文件中是否存在:
RMAN> list copy;

在控制文件中显示最早的日志时间为2021_09_28,之前的归档日志都不存在。这些过期日期因为长期未被发现,空间一直被占用。
为了让rman识别这些早期的日志,我们使用catalog重新装载一下
RMAN> catalog start with '+HISDATA/hisdb/archivelog/';

执行完后重新crosscheck查检一下文件是否物理存在
RMAN> crosscheck archivelog all;

然后再查看一下控制文件中存在,物理上不存在的文件
RMAN> list expired archivelog all;

通过completed before指定时间,发现不起作用。
RMAN> delete noprompt archivelog all completed before 'sysdate-30';

我换了条语句发现可行, until time 与 before 意思一样,但不知道为什么上一条语句不执行,有点懵。
RMAN> delete archivelog until time 'SYSDATE-30';

同时检查 asm 中目录数量,asm上的文件的删除速度与rman中显示的删除过程并不是同步的,要稍微慢于rman中的删除进度。

最终无效日志都得到清除。虽然不在控制文件中的归档日志,我们可以物理删除,但通过rman操作还是更方便一些。




