[20131115]archivelog產生太快dataguard磁碟滿的問題解決.txt

lfree發表於2013-11-15
[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,
提供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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章