ORA-00257 archiver error--資料閃回區滿導致無法歸檔
系統:Windows Server 2008 R2
資料庫版本:Oracle 10.2.0.4
今天上午,一上班就發生錯誤:
ORA-00257: archiver error. Connect internal only, until freed 。
資料庫狀態:開啟但不可用。
警示日誌:
~Errors in file d:\oracle\product\10.2.0\admin\orcl\bdump\orcl_arc1_3032.trc:~ORA-16038: log 3 sequence# 87 cannot be archived~ORA-19809: limit exceeded for recovery files~ORA-00312: online log 3 thread 1: 'E:\ORACLE10GRAC\ORCL\REDO03.LOG'~
經過檢查後發現,我原先偷懶,把歸檔日誌位置放置在了資料庫預設的位置上,就是資料閃回區,這個地區,有2G的空間限制,而歸檔日誌現在就有2G的大小了,所以導致無法產生新的歸檔日誌,導致了上述錯誤。
解決辦法很多:
因為我的資料庫是OTLP線上系統,需要一直提供服務,所以我的最初想法是馬上關閉資料庫,暫時關閉歸檔模式,先提供服務,然後再解決問題。
執行命令shutdown immediate,資料庫一直不動,原因應該是各用戶端一直在串連,所以這個關閉模式,需要沒有主動用戶端,所以導致資料庫一直無法關閉,所以只能關閉重啟伺服器,讓所有用戶端掉線。
在伺服器啟動後,在關閉資料庫,在開啟資料庫到MOUNT模式下,暫時關閉歸檔模式:
alter database noarchivelog;
然後再關閉資料庫,然後再重啟,這時候就可以用了。
至于歸檔模式,可以在用戶端串連少的情況,看準時間,重新進行設定。
三種解決辦法:
方法1:關閉歸檔模式。
方法2:增加閃回資料區大小
alter system set db_recovery_file_dest_size=20G scope=both;
方法3:修改歸檔日誌位置。
追加:
請務必注意,如果歸檔日誌位置在閃回區,那麼務必注意閃回區容量使用方式,可以通過查看v$flash_recovery_area_usage視圖。
select * from v$flash_recovery_area_usage;