單例項歸檔空間佔滿故障模擬實驗
歸檔日誌(Archived Log File)是Oracle資料庫進行備份還原的重要要素之一。開啟歸檔模式(Archived Log Mode)、指定合理的備份計劃是生產資料庫環境的必要條件。
Oracle資料庫在執行中,會不斷的生成Redo Log(重做日誌記錄),當這些記錄生成後,會依據一定規則寫入到Online Redo Log File(線上重做日誌檔案中)。一般資料庫Online Redo Log會以多個組的形式進行迴圈切換,寫完一組Log切換switch到下一組Log。所謂的歸檔模式就是在切換結束之後,Oracle會將完成的Redo Log儲存在一個位置上,用於進行完全恢復使用。
系統不斷的執行,會生成大量的Redo Log記錄,在歸檔模式下不斷寫入的歸檔日誌量也會越來越多。通常設定的歸檔存放空間是有限制的,如果一旦寫滿就會發生資料庫暫時hange住的現象。下面透過實驗來模擬這個過程,並且解釋如果解決。
1、實驗環境構建
因為是模擬實驗,所以選擇Linux環境下的Oracle 11gR2進行。首先,要將系統調整為歸檔模式,並且檢查各種歸檔相關引數指標。
//檢查當前歸檔狀態(非歸檔模式)
SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST //預設的歸檔存放位置;
Oldest online log sequence 107
Current log sequence 109
//歸檔核心引數
SQL> show parameter db_recovery_file
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /u01/flash_recovery_area
db_recovery_file_dest_size big integer 3852M
預設情況下,Oracle存放歸檔的位置是在引數db_recovery_file_dest指定的目錄下,安裝時候進行指定,通常是與$ORACLE_HOME相關路徑。當然,此外還有如log_archive_dest_n類引數指定的其他位置。本篇就不加以涉及了。
引數db_recovery_file_dest_size指定的是該目錄能夠存放的大小。這個引數的作用就是從Oracle資料庫層面對歸檔空間大小進行一定的限制。我們先從Linux檔案系統檢視該目錄空間使用。注意,通常該空間中還會保留一部分控制檔案controlfile和onlinelog的備份。
//檢視目錄
[oracle@oracle11g ~]$ cd /u01/flash_recovery_area/WILSON/
[oracle@oracle11g WILSON]$ ls
controlfile onlinelog
//檢視空間
[oracle@oracle11g WILSON]$ du -h
151M ./onlinelog
9.4M ./controlfile
160M .
為了儘快看到實驗效果,手工調整該目錄引數。設定該目錄容量最大為300M。
//該引數要求在重新啟動之後才能生效;
SQL> alter system set db_recovery_file_dest_size=300M scope=spfile;
System altered.
其次,就是透過重新啟動資料庫,切換到歸檔模式。切換歸檔模式通常需要在mount狀態實現。
--重新啟動並且切換到歸檔模式
[oracle@oracle11g onlinelog]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Thu May 26 16:02:27 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected.
//停止資料庫
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
//啟動到nomount狀態
SQL> startup nomount
ORACLE instance started.
Total System Global Area 414298112 bytes
Fixed Size 1336904 bytes
Variable Size 314575288 bytes
Database Buffers 92274688 bytes
Redo Buffers 6111232 bytes
//進入mount狀態
SQL> alter database mount;
Database altered.
SQL> alter database archivelog;
Database altered.
//open資料庫
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 107
Next log sequence to archive 109
Current log sequence 109
SQL>
//檢視引數已經被修改
SQL> show parameter db_recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /u01/flash_recovery_area
db_recovery_file_dest_size big integer 300M
2、檢查歸檔,構造故障環境
剛開始,歸檔日誌記錄v$archived_log中,是沒有任何記錄資訊的。
SQL> select recid from v$archived_log;
RECID
----------
進行一些DML操作之後,就會生成redo log記錄。同時,我們保持對db_recovery_file_dest目錄的容量監控。直到出現下面情況:
//檢查目錄容量
[oracle@oracle11g WILSON]$ du -h
151M ./onlinelog
9.4M ./controlfile
126M ./archivelog/2011_05_26
126M ./archivelog
285M .
//此時v$archived_log記錄為
SQL> select recid, stamp, name, sequence# from v$archived_log;
RECID STAMP NAME SEQUENCE#
---------- ---------- -------------------------------------------------------------------------------- - ----------
1 752170209 &&/2011_05_26/o1_mf_1_109_6xw2q1rg_.arc 109
2 752170245 &&/2011_05_26/o1_mf_1_110_6xw2r574_.arc 110
3 752170247 &&/2011_05_26/o1_mf_1_111_6xw2r7t1_.arc 111
4 752170351 &&/2011_05_26/o1_mf_1_112_6xw2vggx_.arc 112
5 752170392 &&/2011_05_26/o1_mf_1_113_6xw2wpyb_.arc 113
6 752170397 &&/2011_05_26/o1_mf_1_114_6xw2wwd6_.arc 114
6 rows selected
說明:
篇幅原因,結果有剪裁,其中&&表示路徑:/u01/flash_recovery_area/WILSON/archivelog
此時,db_recovery_file_dest目錄已經接近容量限額300M。故障環境構造成功。
3、Archive Redo Log寫滿故障現象
此時,我們觀察到如下幾個現象:
ü 進行所有DML等生成Redo Log操作,系統無響應
此時,任何會生成Redo Log記錄的操作,都不能獲取到響應。Online Redo Log要保證在被下次覆寫之前,完成歸檔操作。由於歸檔空間不能實現寫入,所以歸檔操作程式arch就被停止住,進而寫redo log的動作也會被block住。
ü 除sys使用者外的普通使用者,連線失敗
當我們嘗試使用非sys使用者登入系統時,Oracle提出拒絕。
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 5月 28 21:45:44 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn scott/tiger@wilson ;
ERROR:
ORA-00257: archiver error. Connect internal only, until freed.
//只能sys使用者登入;
SQL> conn sys/Sys@wilson as sysdba;
已連線。
ü Alert_log中寫入錯誤資訊
此時觀察alert_log,可以看到錯誤提示。
--alert log資訊
Thu May 26 16:18:52 2011
Errors in file /u01/diag/rdbms/wilson/wilson/trace/wilson_arc3_5893.trc:
ORA-19815: WARNING: db_recovery_file_dest_size of 314572800 bytes is 100.00% used, and has 0 remaining bytes available.
Errors in file /u01/diag/rdbms/wilson/wilson/trace/wilson_arc3_5893.trc:
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 47672320 bytes disk space from 314572800 limit
ARC3: Error 19809 Creating archive log file to '/u01/flash_recovery_area/WILSON/archivelog/2011_05_26/o1_mf_1_115_%u_.arc
4、解決問題
嘗試解決此型別問題,要根據不同的資料庫配置環境依據不同的方法來確定。如果是生產環境,可以考慮暫時擴大恢復區、或者直接刪除歸檔日誌之後全庫備份的策略。
刪除歸檔日誌的方式上,有一些注意方面。因為歸檔記錄是寫入進控制檔案Control File的,所以即使直接從檔案系統中刪除,Oracle資料庫也不會認為該檔案已經刪除。解決的方式就是使用RMAN工具。
[oracle@oracle11g trace]$ rman nocatalog
Recovery Manager: Release 11.2.0.1.0 - Production on Thu May 26 16:20:32 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
RMAN> connect target /
connected to target database: WILSON (DBID=3851616883)
using target database control file instead of recovery catalog
//顯示歸檔日誌
RMAN> crosscheck archivelog all;
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=23 device type=DISK
validation succeeded for archived log
archived log file name=/u01/flash_recovery_area/WILSON/archivelog/2011_05_26/o1_mf_1_109_6xw2q1rg_.arc RECID=1 STAMP=752170209
validation succeeded for archived log
archived log file name=/u01/flash_recovery_area/WILSON/archivelog/2011_05_26/o1_mf_1_110_6xw2r574_.arc RECID=2 STAMP=752170245
validation succeeded for archived log
archived log file name=/u01/flash_recovery_area/WILSON/archivelog/2011_05_26/o1_mf_1_111_6xw2r7t1_.arc RECID=3 STAMP=752170247
validation succeeded for archived log
archived log file name=/u01/flash_recovery_area/WILSON/archivelog/2011_05_26/o1_mf_1_112_6xw2vggx_.arc RECID=4 STAMP=752170351
validation succeeded for archived log
archived log file name=/u01/flash_recovery_area/WILSON/archivelog/2011_05_26/o1_mf_1_113_6xw2wpyb_.arc RECID=5 STAMP=752170392
validation succeeded for archived log
archived log file name=/u01/flash_recovery_area/WILSON/archivelog/2011_05_26/o1_mf_1_114_6xw2wwd6_.arc RECID=6 STAMP=752170397
Crosschecked 6 objects
刪除日誌。
//刪除當前日期之前的所有日誌;
RMAN> delete archivelog all completed before 'sysdate';
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=23 device type=DISK
List of Archived Log Copies for database with db_unique_name WILSON
=====================================================================
(篇幅原因,有省略…)
Do you really want to delete the above objects (enter YES or NO)? yes
Deleted 6 objects
(篇幅原因,有省略…)
RMAN>
此時,歸檔儲存日誌已經釋放。已經下降到安全範圍。
[oracle@oracle11g flash_recovery_area]$ du -h
151M ./WILSON/onlinelog
9.4M ./WILSON/controlfile
4.0K ./WILSON/archivelog/2011_05_26
8.0K ./WILSON/archivelog
160M ./WILSON
160M .
此時,普通使用者可以登入,其他故障現象消除。
//scott使用者登入;
SQL> conn scott/tiger@wilson;
已連線。
5、結論
本篇演示了最基本的歸檔空間滿引起hange住的情況和解決。從這個例子出發,我們可以得到如下經驗:
ü 不同的資料庫結構、用途和系統要求,恢復archived log寫滿的方案是不同的。針對不同的結構,指定出不同的解決策略方法;
ü 關注歸檔空間策略和儘早制定解決之道。在系統切換或者計劃切換到歸檔模式的那一刻起,就要開始針對歸檔日誌、空間的管理策略制度。同時,要保證時刻進行空間監控,不要等出現hange住,特別是生產環境業務峰期hange住再解決問題;
ü 對歸檔環境下的大規模dml操作要慎重,防止短時間內redo log歸檔生成失控;(筆者有此教訓)
ü 不要貿然rm掉歸檔,要關注整體的備份集合狀態和系統要求;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-696711/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 手工清除歸檔處理歸檔空間滿
- js模擬實現名稱空間功能程式碼例項JS
- 歸檔空間不足導致例項死鎖
- rac使用預設閃回區歸檔空間滿
- ORA-00257歸檔日誌空間已滿
- ORACLE的歸檔空間滿導致的監聽故障資料庫無法啟動Oracle資料庫
- js模擬實現名稱空間簡單介紹JS
- 模擬實現select下拉選單例項程式碼單例
- 2011-10-26早上PROCINST例項歸檔空間滿,CRONTAB任務未自動執行。。。。
- undo表空間佔用磁碟空間滿案例處理
- oracle rac及單例項開啟歸檔Oracle單例
- js模擬實現select下拉選單程式碼例項JS
- Oracle的temp表空間被佔滿Oracle
- 記一次Oracle故障:磁碟空間滿Oracle
- 模擬select下拉選單程式碼例項
- Windows平臺模擬單例項ASM環境Windows單例ASM
- MySQL 磁碟空間滿導致表空間相關資料檔案損壞故障處理MySql
- js驗證表單項是否為空例項程式碼JS
- ORACLE 歸檔空間滿導致的enq: TX - row lock contentionOracleENQ
- 模擬美化select下拉選單程式碼例項
- 透過xtts遷移單例項檔案系統表空間到RAC ASM儲存表空間TTS單例ASM
- 通過xtts遷移單例項檔案系統表空間到RAC ASM儲存表空間TTS單例ASM
- 模擬阻塞會話例項會話
- 資料庫夯住!ORA-19815!歸檔空間滿資料庫
- javascript模擬實現ArrayList效果程式碼例項JavaScript
- 模擬實現Object.is()方法程式碼例項Object
- javascript模擬實現toAarray()方法程式碼例項JavaScript
- ubunt下boot檔案空間滿boot
- javascript名稱空間使用簡單程式碼例項JavaScript
- Linux磁碟空間佔滿問題快速排雷Linux
- ARCHIVE歸檔日誌爆滿故障ORA-00257Hive
- Oracle9.2.0.7 RAC , 例項2的歸檔到了例項1的歸檔目錄 ?Oracle
- 解決Ubuntu虛擬機器佔用空間與實際空間不符問題Ubuntu虛擬機
- oracle資料庫歸檔日誌空間滿引起的錯誤處理Oracle資料庫
- 處理歸檔滿了fast_recovery_area無剩餘空間的案例AST
- 檢視歸檔日誌空間
- 單例項和單點故障怎麼辦?單例
- js模擬實現hashCode()方法程式碼例項JS