Oracle数据库ASM归档只保留最后一天?原来是delete input搞的鬼

hzcyhujw 2019-04-25

概述

今天主要是记录一个比较奇怪的地方,之前ASM归档目录会保留几天,有一次全清空后导致后面ASM归档目录每次都只保留最后一天归档,看是不是因为RMAN在删除归档日志的同时删除空目录导致。


1、删除ASM所存归档

之前因为归档空间满,在删除归档的时候同事执行了命令:

delete archivelog until time 'sysdate-1';

删除之前ASM上是保留有几天的归档的,删除后只剩最后一天保留。

2、编写定期归档脚本

后来写了个自动删除5天以前的归档脚本(本来是3天,然后改成5天)

Oracle数据库ASM归档只保留最后一天?原来是delete input搞的鬼

3、奇怪地方

观察了几天发现ASM都只保留了当天的归档,之前的归档不做保存。

Oracle数据库ASM归档只保留最后一天?原来是delete input搞的鬼

Oracle数据库ASM归档只保留最后一天?原来是delete input搞的鬼

这里我后来停了定期删除归档的脚本,但是还是有这情况,每天ASM上只保留最后一天归档。

4、查看实际备份情况

list backup of archivelog all completed before 'sysdate-7';

这个是在22号执行的,可以看到实际上是有备份的,但是备份路径为/backup,而不是在ASM上。而控制文件会自动备份在ASM上,即使/backup每天有自动备份。

Oracle数据库ASM归档只保留最后一天?原来是delete input搞的鬼

可以看到归档不备份在ASM上,备份在本地/backup目录,控制文件备份在ASM上。

Oracle数据库ASM归档只保留最后一天?原来是delete input搞的鬼

5、查看定时备份脚本

这里可以看到之前同事用了delete input的用法。

Oracle数据库ASM归档只保留最后一天?原来是delete input搞的鬼

注意:

delete input 只备份一个路径下的archivelog,只删除备份的目标路径下的archivelog;

delete all input 只备份一个路径下的archivelog,删除所有路径下的archivelog;

6、考虑是否触发bug:RMAN在删除归档日志的同时删除空目录。

查询了metalink文档,发现有可能是Oracle的bug,metalink文档Bug No. 4431215描述了这个问题。

如果在ASM上建立的目录名称和SID前缀相同,则这个目录下的所有目录一旦为空,就会被ASM实例自动删除,不管这个目录是ASM自动建立,还是用户手工建立的。

解决这个问题的办法倒是很多,比如将归档目录设置到日志文件的目录中,或者改变主目录的名称使其和ORACLE_SID有所区别。还有更简单的办法,在归档目录下拷贝一个小文件,使得归档被删除后,归档目录不为空,从而避免路径被清除。

这里我复制了spfile文件,等23号再观察下情况。

Oracle数据库ASM归档只保留最后一天?原来是delete input搞的鬼

7、测试验证

检查发现ASM上只保留了23号的归档文件,22号的自动删除了。不是因为bug(低版本才有可能,我的版本是11.2.0.4)导致。

Oracle数据库ASM归档只保留最后一天?原来是delete input搞的鬼

总结:

delete input删除已备份的归档日志,因为我只有一个fra归档路径(ASM上),应该是检测到/backup已经备份归档日志了,所以删除了ASM那边。后面会分享更多DBA方面的内容,感兴趣的朋友可以关注一下~

Oracle数据库ASM归档只保留最后一天?原来是delete input搞的鬼

相关推荐