您好,欢迎访问一九零五行业门户网

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

上周五去某客户那里做数据库巡检,是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 2014lns: standby redo logfile selected for thread 1 sequence 3945 for destination log_archive_dest_2tue nov 11 10:14:29 2014errors 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 2014errors 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 continuingsun nov 16 04:05:15 2014errors 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.806tkcrrsarc: (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.900tkcrrsarc: (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.962tkcrrsarc: (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.025tkcrrsarc: (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.088tkcrrsarc: (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+cnnldcbsaw5lcyaxntagcmnvbcbuyw1ligzvcibhmtuwiapzzxqgcgfnzxnpemugmcbmzwvkymfjaybvzmygdmvyawz5ig9mzibozwfkaw5nig9mzibly2hvig9mziakc3bvb2wgzgvszxrlx2fyy2hpdmvsb2cuymf0iapzzwxly3qgdel '||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任务计划中定期运行即可,由于客户的日志切换频率并不高,因此暂定为每周清一次归档。
其它类似信息

推荐信息