ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [20131115]archivelog产生太快dataguard磁盘满的问题解决.txt

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

原创 Linux操作系统 作者:lfree 时间:2013-11-15 15:11:15 0 删除 编辑
[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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    2456
  • 访问量
    6259912