1. 首页
  2. IT资讯

[20131115]archivelog产生太快dataguard磁盘满的问题解决.txt

[20131115]archivelog产生太快dataguard磁盘满的问题解决.txt

今天早上例行检查数据库,发现开发升级程序有问题,有一个表的修改出现循环,不断修改
一个字段,导致archive日志产生太多,dataguard的磁盘空间不足,日志无法应用的情况。

解决方法1:
1.在dg上查看:
SQL> set numwidth 20
SQL> select current_scn from v$database ;

CURRENT_SCN
———–
10217872689

–然后在生产系统执行备份:
BACKUP INCREMENTAL FROM SCN 10217872689 DATABASE tag=”inc20131115″  format ‘/mnt/xxx.backup/inc_%U’;

–然后在dg上,catalog备份:
RMAN> catalog start with ‘/mnt/xxx.backup/’;
RMAN> recover automatic standby database until cancel;

–我们生产系统没有增量备份,数据库很大(1.2T),这样做备份时间有点长,而且上午有业务跑,可能影响正常的业务操作。
–放弃这种方式!

解决方法2:
1.检查dg的alert*.log:
Thu Nov 14 01:23:11 2013
Media Recovery Log +G0/xxxx/archivealias/0001_0000024627_772789050.dbf
Thu Nov 14 01:23:12 2013

Redo Shipping Client Connected as PUBLIC
— Connected User is Valid
RFS[1208]: Assigned to RFS process 16354
RFS[1208]: Identified database type as ‘physical standby’
Creating archive destination file : +G0/xxxx/archivealias/0001_0000025355_772789050.dbf (72860 blocks)
Thu Nov 14 01:23:13 2013
Errors in file /u01/app/oracle/admin/xxxx/udump/xxxx_rfs_16354.trc:
ORA-00270: error creating archive log +G0/xxxx/archivealias/0001_0000025355_772789050.dbf
ORA-19504: failed to create file “+G0/xxxx/archivealias/0001_0000025355_772789050.dbf”
ORA-17502: ksfdcre:4 Failed to create file +G0/xxxx/archivealias/0001_0000025355_772789050.dbf
ORA-15041: diskgroup space exhausted
Thu Nov 14 01:23:13 2013

–很明显日志应用到+G0/xxxx/archivealias/0001_0000024627_772789050.dbf出现磁盘满的情况。
 
2.先删除已经应用的日志,在dg上删除不需要的archivelog日志,腾出磁盘空间:

RMAN> delete archivelog  until logseq 24626;
–保险一点,我还保留logseq=24627的archivelog;

3.应用日志:
SQL> alter database recover managed standby database using current logfile disconnect ;

4.在dg上不断检测alert*.log日志:
$ tail -f alert_xxx.log | grep ‘^Media Recovery Log’

4.这样不停的重复第2步问题解决,把已经应用的日志删除。
RMAN> delete archivelog  until logseq XXX;
–最好每次少1,安全一点。
–使用2个多小时,问题解决。

总结:
1.主要问题没有做好数据库监测。
2.dg的硬盘空间也太小了,选择更大的磁盘,这个问题就没有这么麻烦了。

–补充:
正好看了1篇blog,http://ardentperf.com/2013/11/18/delete-archived-logs-from-standby/
提供1个脚本,删除已经应用的blog。内容如下:

PRE="set pagesize 0 n set feedback off n"; SS="$ORACLE_HOME/bin/sqlplus -L -S / as sysdba"  ROLE=$(echo -e "$PRE select database_role from v$database;" | $SS)  [[ "$ROLE" != "PHYSICAL STANDBY" ]] && { echo "ERROR: database not a physical standby"; exit 1; }  THREADS=$(echo -e "$PRE select distinct thread# from v$archived_log;" | $SS)  for THREAD in $THREADS; do    MAX_APPLIED=$(echo -e "$PRE select max(sequence#) from v$archived_log where applied='YES' and thread#=$THREAD;" | $SS)    echo "delete noprompt archivelog until sequence $MAX_APPLIED thread $THREAD;"|rman target /  done

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/267265/viewspace-776673/,如需转载,请注明出处,否则将追究法律责任。

主题测试文章,只做测试使用。发布者:深沉的少年,转转请注明出处:http://www.cxybcw.com/182938.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code