IT技术互动交流平台

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

来源:IT165收集  发布日期:2014-12-17 21:14:09
上周五去某客户那里做数据库巡检,是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.ora等,只需要在主库创建一个备库控制文件,然后再把主库的RMAN备份集拿到备库去恢复就行了。具体过程这里就不写了,配置完DG后,检查两边归档路径状态,确定没有error后开启redo apply,备库就又和主库数据同步了。
因为可用磁盘空间仍然比较小,因此这次专门给客户配置了自动删除备库归档日志的脚本,主要用到了3个文件,大致内容如下:
--delete_dg_archivelog cd D:\archivelogdel d: sqlplus / as sysdba @delete_archive.sql echo rman target / cmdfile=rman_checkcross.rman>>delete_archivelog.bat delete_archivelog.bat >>delete_dg_archivelog_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%".log exit
--delete_archive.sql set lines 150 col name for a150 set pagesize 0 feedback off verify off heading off echo off spool delete_archivelog.bat select "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任务计划中定期运行即可,由于客户的日志切换频率并不高,因此暂定为每周清一次归档。


Tag标签: 磁盘   空间  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规