上周五去某客户那里做数据库巡检。是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分钟报一次错误。在备库查看,发现原来是由于没有定期清理主库传递过来的归档日志。磁盘空间耗尽了。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWFyb244MjE5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


70G空间所实用完了,因为客户的磁盘本来就比較小,当中一部分还用来存放数据文件,本身就要占用47G。



最后一个归档日志是11月11日,7:25生成的,后面就没有了,这和trace文件里的报错也是符合的。因为这个时刻耗尽了磁盘的最后一些空间,进而造成了主库报警日志中出现的无法创建远程归档的错误,既然找到问题了,那么处理就easy了,先把备库应用过的归档删除掉。释放磁盘空间。


因为备库归档存在GAP,而且这些GAP在主库的归档中也已经没有了,主库并没有保留许多的归档。切归档日志也没有单独做备份集,因此仅仅能是又一次配置DG Configuration。

今天过去客户那边,把DG又一次配置了一下。

步骤事实上非常easy,由于之前已经配置过一次,这次仅仅要是同步一下即可了,不须要改动參数,拷贝參数文件、password文件、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任务计划中定期执行就可以,因为客户的日志切换频率并不高,因此暂定为每周清一次归档。



DG备库磁盘空间满导致无法创建归档的更多相关文章

  1. 阿里云rds 磁盘空间满导致实例锁定

    1.RDS 数据日志已经快满了, 导致数据库不能写入,只读. 2. Binlog日志的保存及清理规则 MySQL实例的空间内默认清理binlog日志的规则如下: 实例空间内默认会保存最近18个小时内的 ...

  2. 模拟主库创建数据文件,dg备库空间不足时问题处理

    本篇文档测试目的: 模拟实际环境中,主库对表空间添加数据文件,备库空间不足,最终导致MRP进程自动断开,处理方式. 1.问题环境模拟 1)正常情况下的dg 主库创建数据文件,备库接受日志,自动创建表空 ...

  3. DG备库无法接受主库归档日志之密码文件

    DG备库无法接受主库归档日志之密码文件 实验目的:还原某个客户案例,客户审计需要,对主库sys用户进行锁定,一小时后对sys用户进行解锁后,发现备库无法接受主库的归档日志 本篇文章,测试sys用户与D ...

  4. linux磁盘空间满的处理

    Java中运行SQL插入数据时报错: linux磁盘空间满处理: 1.df -h  查看磁盘空间占用,实际上是查看磁盘块占用的文件(block) 2.分别查看输入以下命令 (面对磁盘满了,通过下列命令 ...

  5. No space left on device 解决Linux系统磁盘空间满的办法

    最近Linux电脑在执行mvn时候总是报错: No space left on device   原因是磁盘空间满了,我马上加了20G的硬盘容量,但是还是报错,上网查了一下,发现了解决方法,我用了其中 ...

  6. oracle所在磁盘空间不足导致了数据库异常

    oracle所在磁盘空间不足导致了数据库异常.需要减小数据文件的大小来解决. 1.检查数据文件的名称和编号 select file#,name from v$datafile; 2.看哪个数据文件所占 ...

  7. linux磁盘空间满?

    磁盘空间满啦 找到项目的logs文件夹 进入logs文件夹,会看到很多access.log*文件. 在Xshell里,输入命令cd 到项目节点的logs文件夹 可能还需要清空下回收站.

  8. DG备库,实时应用如何判断,MR进程,及MRP应用归档,三种情况的查询及验证

    本篇文档学习,DG备库,实时应用如何判断,MR进程,及MRP应用归档,三种情况的查询及验证 1.取消MRP进程 备库查询进程状态select process,client_process,sequen ...

  9. 因磁盘空间不足导致HDFS的NameNode进入安全模式问题记录

    因磁盘空间不足导致HDFS的NameNode进入安全模式问题记录,调用API上传及下载文件时报如下错误信息: org.apache.hadoop.ipc.RemoteException(org.apa ...

随机推荐

  1. 深入理解python对象及属性

    类属性和实例属性首先来看看类属性和类实例的属性在python中如何存储,通过__dir__方法来查看对象的属性 >>> class Test(object): pass>> ...

  2. pil - pillow 的版本

    pip install  PIL        python2版本 pip install  pillow      python3版本

  3. CREATE TABLE - 定义一个新表

    SYNOPSIS CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name ( { column_name data_ty ...

  4. cp - 复制文件和目录

    总览 cp [选项] 文件路径 cp [选项] 文件...目录 POSIX 选项: [-fipRr] GNU 参数(最短形式): [-abdfilprsuvxPR] [-S SUFFIX] [-V { ...

  5. vitualbox网络设置链接

    网文摘录地址:https://blog.csdn.net/yushupan/article/details/78404395 vitualbox网络设置: 一.NAT模式 特点: 1.如果主机可以上网 ...

  6. 【C语言】控制台窗口图形界面编程(二)窗口信息和填充缓冲区

    目录 00. 目录 01. COORD结构体 02. SMALL_RECT结构 03. CONSOLE_SCREEN_BUFFER_INFO结构体 04. GetConsoleScreenBuffer ...

  7. PHP:Invalid argument supplied for foreach()错误原因及解决办法

    在php中使用foreach循环遍历时报Invalid argument supplied for foreach()错误,是因为循环的数据不是一个有效的数组. 因此我们只要在foreach之前判断一 ...

  8. Dijkstra+set堆优化局部模板

    这是某天2018-10-25写的某题(P1613-luogu)的局部代码,目的是方便自己记忆一些细节,所以这里不过多赘述算法原理或题目 邻接矩阵mapp表示有向图 struct ELE { int i ...

  9. [Luogu] P3846 [TJOI2007]可爱的质数

    题目描述 给定一个质数P(2<=P<2312^{31}231),以及一个整数B(2<=B<P),一个整数N(2<=N<P). 现在要求你计算一个最小的L,满足BL≡ ...

  10. 利用端口转发来访问virtualbox虚拟机centos6的jupyter notebook

    1.除了在virtualbox中设置常规的端口转发外,还需要在windows上打开cmd,输入ssh -N -f -L localhost:8888:localhost:8889 -p 22 root ...