archivelog滿了導致資料庫怠機的solution

dotaddjj發表於2011-10-11

以前就遇到過archivelog滿了,導致無法登陸資料庫。今天自己在測試append直接插入和insert插入時不巧自己剛好又遇見了,ora-16038 ora-19809 ora-00312Oracle資料庫中有個閃回恢復區flash_recovery_area預設的是2G的大小,由於本機資料庫是archivelogflashback on同時開啟了,產生的歸檔日誌和閃回日誌超過了2G容量的大小,也就導致無法歸檔,造成arch程式失敗資料庫而怠機了。

首先flash_recovery_area滿了導致sys使用者也無法登陸資料庫,此時肯定需要做的是先登陸資料庫吧。於是手動在os上刪除部分archivelog來騰出空間,但是此時資料庫還是無法登陸。

由於是windows測試機自己os

net stop oracleserviceorcl

停止了資料庫服務歷程。

Net start oracleserviceorcl

開啟資料庫服務歷程

不過此服務只存在與windows下,linux下是不存在此服務的。

I

Sqlplus / as sysdba

Startup;

此時檢視alert日誌:

Errors in file d:oracleproduct10.2.0adminorclbdumporcl_arc1_916.trc:

ORA-16038: log 1 sequence# 56 cannot be archived

ORA-19809: limit exceeded for recovery files

ORA-00312: online log 1 thread 1: 'D:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG'

出現了上述三個ora錯誤,還是已經滿了redo log無法完成歸檔。雖然我們在os上刪除了archivelog騰出了空間,但是還需要在oracle上也就是控制檔案中的記錄再次清除os上刪除的archivelog

Rman target /

Crosscheck archivelog all

Delete expired archivelog all

利用crosscheckos上刪除archivelogrman目錄中標記為expired過期,然後delete expired archivelog all

此時再連線資料庫

Sqlplus / as sysdba

Shutdown immediate

Startup;

此時資料庫也正常工作了!所以有時候還是要多關心一下flash_recovery_area的引數的設定。

II

當然一樣需要用sys使用者進入資料庫啟動資料庫,同樣到open狀態出錯

Startup

ORA-16038: 日誌 3 序列號 46 無法歸檔

ORA-19809: 超出了恢復檔案數的限制

ORA-00312: 聯機日誌 1 執行緒 1: 'D:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG'

(此時記得以前的blog中提到了丟失log的解決方法

Alter database clear unarchived logfile 'D:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG';

重新清除redo log新建,但是如果是當前的redo且還沒有歸檔是不行的。如果丟失的非當前redo完全可以這樣來解決。Alter database clear unarchived logfile重建redo

那就直接增大flash_recovery_area容量吧

Alter system set db_recovery_file_dest_size=10g scope=both

然後檢視一下

Select * from v$flash_recovery_area_usage

其中的archivelogused已經降下來了!

Alter database open

即可開啟

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1055605/,如需轉載,請註明出處,否則將追究法律責任。

相關文章