DG备库磁盘空间满导致无法创建归档
程序员文章站
2022-05-13 13:08:37
...
上周五去某客户那里做数据库巡检,是window 2008系统上10g的一套NC系统的库,已经配置了DG,但是巡检时发现数据库报错: Tue Nov 11 10:13:57 2014LNS: Standby redo logfile selected for thread 1 sequence 3945 for destination LOG_ARCHIVE_DEST_2Tue Nov
上周五去某客户那里做数据库巡检,是window 2008系统上10g的一套NC系统的库,已经配置了DG,但是巡检时发现数据库报错:Tue Nov 11 10:13:57 2014 LNS: Standby redo logfile selected for thread 1 sequence 3945 for destination LOG_ARCHIVE_DEST_2 Tue Nov 11 10:14:29 2014 Errors in file d:\oracle\product\10.2.0\admin\nc\bdump\nc_arc0_177356.trc: ORA-16401: archivelog rejected by RFS
FAL[server, ARC0]: FAL archive failed, see trace file. Sun Nov 16 04:05:12 2014 Errors in file d:\oracle\product\10.2.0\admin\nc\bdump\nc_arc0_177356.trc: ORA-16055: FAL request rejected
ARCH: FAL archive failed. Archiver continuing Sun Nov 16 04:05:15 2014 Errors in file d:\oracle\product\10.2.0\admin\nc\bdump\nc_arc0_177356.trc: ORA-00270: error creating archive log
提示归档日志被RFS进程拒绝,FAL进程请求被拒绝,无法创建归档日志
*** 2014-11-11 10:14:29.806 tkcrrsarc: (WARN) Failed to find ARCH for message (message:0x2) tkcrrpa: (WARN) Failed initial attempt to send ARCH message (message:0x2) Error 16401 creating standby archive log file at host 'ncdg' ORA-16401: archivelog rejected by RFS *** 2014-11-11 10:15:29.900 tkcrrsarc: (WARN) Failed to find ARCH for message (message:0x2) tkcrrpa: (WARN) Failed initial attempt to send ARCH message (message:0x2) Error 16401 creating standby archive log file at host 'ncdg' ORA-16401: archivelog rejected by RFS *** 2014-11-11 10:16:29.962 tkcrrsarc: (WARN) Failed to find ARCH for message (message:0x2) tkcrrpa: (WARN) Failed initial attempt to send ARCH message (message:0x2) Error 16401 creating standby archive log file at host 'ncdg' ORA-16401: archivelog rejected by RFS *** 2014-11-11 10:17:30.025 tkcrrsarc: (WARN) Failed to find ARCH for message (message:0x2) tkcrrpa: (WARN) Failed initial attempt to send ARCH message (message:0x2) Error 16401 creating standby archive log file at host 'ncdg' ORA-16401: archivelog rejected by RFS *** 2014-11-11 10:18:30.088 tkcrrsarc: (WARN) Failed to find ARCH for message (message:0x2) tkcrrpa: (WARN) Failed initial attempt to send ARCH message (message:0x2) Error 16401 creating standby archive log file at host 'ncdg' ORA-16401: archivelog rejected by RFS
查看trace文件nc_arc0_177356.trc得知,从11月11日上午10点14分开始报错,也是类似的提示,再目标主机无法创建归档日志文件,平均1分钟报一次错误,在备库查看,发现原来是因为没有定期清理主库传递过来的归档日志,磁盘空间耗尽了!
70G空间全部用完了,由于客户的磁盘本来就比较小,其中一部分还用来存放数据文件,本身就要占用47G。
最后一个归档日志是11月11日,7:25生成的,后面就没有了,这和trace文件中的报错也是符合的,由于这个时刻耗尽了磁盘的最后一些空间,进而造成了主库报警日志中出现的无法创建远程归档的错误,既然找到问题了,那么处理就容易了,先把备库应用过的归档删除掉,释放磁盘空间。
由于备库归档存在GAP,并且这些GAP在主库的归档中也已经没有了,主库并没有保留非常多的归档,切归档日志也没有单独做备份集,因此只能是重新配置DG Configuration。
今天过去客户那边,把DG重新配置了一下。步骤其实很简单,因为之前已经配置过一次,这次只要是同步一下就行了,不需要修改参数,拷贝参数文件、密码文件、tnsnames.ora、listener.Z喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcmG1yKOs1rvQ6NKq1NrW97/itLS9qNK7uPaxuL/iv9jWxs7EvP6jrMi7uvPU2bDR1ve/4rXEUk1BTrG4t928r8TDtb2xuL/iyKW71ri0vs3Q0MHLoaO+38zluf2zzNXiwO++zbK70LTBy6OsxeTWw83qREe686OsvOyy6cG9sd+56bW1wre+tte0zKyjrMi3tqjDu9PQZXJyb3K687+qxvRyZWRvIGFwcGx5o6yxuL/ivs3T1rrN1ve/4sr9vt3NrLK9wcuhowoKPGJyPgoKCtLyzqq/ydPDtMXFzL/VvOTI1Mi7sci9z9Cho6zS8rTL1eK0zteow8W4+L/Nu6fF5NbDwcvX1Lavyb6z/bG4v+K56bW1yNXWvrXEvcWxvqOs1vfSqtPDtb3ByzO49s7EvP6jrLTz1sLE2sjdyOfPwqO6Cgo8YnI+CgoKPHN0cm9uZz4tLWRlbGV0ZV9kZ19hcmNoaXZlbG9nPC9zdHJvbmc+CgpjZCBEOlxhcmNoaXZlbG9nZGVsCmQ6IApzcWxwbHVzIC8gYXMgc3lzZGJhIEBkZWxldGVfYXJjaGl2ZS5zcWwgCmVjaG8gcm1hbiB0YXJnZXQgLyBjbWRmaWxlPXJtYW5fY2hlY2tjcm9zcy5ybWFuJmd0OyZndDtkZWxldGVfYXJjaGl2ZWxvZy5iYXQgCmRlbGV0ZV9hcmNoaXZlbG9nLmJhdCAmZ3Q7Jmd0O2RlbGV0ZV9kZ19hcmNoaXZlbG9nXyVEQVRFOn4wLDQlJURBVEU6fjUsMiUlREFURTp+OCwyJSZxdW90Oy5sb2cgCmV4aXQgCjxicj4KCjxzdHJvbmc+LS1kZWxldGVfYXJjaGl2ZS5zcWwgPC9zdHJvbmc+CnNldCBsaW5lcyAxNTAgCmNvbCBuYW1lIGZvciBhMTUwIApzZXQgcGFnZXNpemUgMCBmZWVkYmFjayBvZmYgdmVyaWZ5IG9mZiBoZWFkaW5nIG9mZiBlY2hvIG9mZiAKc3Bvb2wgZGVsZXRlX2FyY2hpdmVsb2cuYmF0IApzZWxlY3Qg"del '||name from v$archived_log where APPLIED='YES' AND NAME IS NOT NULL and DEST_ID=1; spool off exit;
--rman_checkcross.rman crosscheck archivelog all; delete noprompt expired archivelog all; exit
下面来说明一下这个脚本,其中第一个bat脚本就是去调用了delte_archive.sql和rman_checkcross.rman这2个命令文件,最主要的就是delete_archive.sql这个脚本的执行内容,用SQL拼接的方式找出已经应用过的归档文件,然后生成del命令,在OS级别删除它们,最后再调用rman命令交叉校验,最后删除expired的归档日志(OS级别的删了,也要通知控制文件这些归档已经不存在了,需要删除),如果日志还未在备库应用,那么之前的那条select语句是不会查询出行记录的。
今天第一次做的时候delete_archivelog.sql中select语句用DEST_ID=1的时候,居然没查到数据行,用了DEST_ID=2才有结果,而后来又碰到用DEST_ID=2没结果,于是又换回DEST_ID=1才行。其实最主要的就是要关注SQL脚本要跑出结果,否则之前的那些命令都等于不起作用了,没有结果,OS命令就不会去del这些文件,而如果OS级别没有del掉这些文件,那么RMAN就检查不出是expired的,因此也就不会从控制文件中删除这些归档的相关记录。
最后把这个脚本添加到windows任务计划中定期运行即可,由于客户的日志切换频率并不高,因此暂定为每周清一次归档。