Home  >  Article  >  Database  >  DG备库磁盘空间满导致无法创建归档

DG备库磁盘空间满导致无法创建归档

WBOY
WBOYOriginal
2016-06-07 16:12:171850browse

上周五去某客户那里做数据库巡检,是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任务计划中定期运行即可,由于客户的日志切换频率并不高,因此暂定为每周清一次归档。


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn