已經不止一次自己本機電腦安裝的Oracle使用plsqldev軟件登入提示這個了.一般前一天還好好的,今天就不行了.好好總結一下吧,也共大家一起借鑒.主要原因還是數據的歸檔日志因為內部內存已經耗盡,不能在進行歸檔導致數據庫啟動異常,沒有辦法正常打開數據庫實例,監聽程序就無法連接到對應的orcle實例數據庫上,就導致了這個問題.歸根結底還是Oracle服務由于開通了歸檔功能,內存已經滿了無法歸檔導致數據庫實例沒有正常啟動,也就監聽到無法連接和使用了.
關于找出錯誤原因還是看Oracle的監聽日志和使用命令行窗口上管理員身份去登入測試.Oracle的監聽日志的位置一般在你安裝Oracle的位置例如:D:\***\***\diag\rdbms\orcl\orcl\alert這樣目錄下的log.xml文件中,如下圖:
這個Oracle的警告日志文件是問題信息的關鍵.
打開日志文件后可以查看到:
Errors in file d:\app\***\diag\rdbms\orcl\orcl\trace\orcl_arc1_7068.trc:
ORA-16038: log 1 sequence# 5143 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 1 thread 1: 'D:\APP\***\ORADATA\ORCL\REDO01.LOG'日志不能被歸檔了;
具體解釋如下:
ORA-16038: 日志 1 sequence# 5143 無法歸檔
- 含義:數據庫正在嘗試將一個已經寫滿的聯機重做日志文件(REDO01.LOG,序列號 5143)歸檔到歸檔日志目標位置,但這個操作失敗了。
- 背景:在 ARCHIVELOG 模式下,當一個聯機重做日志文件寫滿后,ARCn 后臺進程會將其復制到一個或多個歸檔位置,這個過程叫“歸檔”。只有歸檔成功后,這個聯機日志文件才能被 LGWR 后臺進程再次使用。
ORA-19809: 超出了恢復文件數的限制
- 含義:這是導致歸檔失敗的根本原因。Oracle 的快速恢復區(Fast Recovery Area, FRA)已經滿了,無法再存放新的歸檔日志文件。
- FRA 是什么?:FRA 是 Oracle 管理的一個磁盤空間,用于集中存放備份文件和歸檔日志文件。它有一個預設的大小限制。當這個空間被用盡時,數據庫就無法再創建新的歸檔日志,也無法進行新的備份。
ORA-00312: 聯機日志 1 線程 1: ‘D:\APP\***\ORADATA\ORCL\REDO01.LOG’
- 含義:這指明了具體是哪個聯機日志文件出了問題。它告訴數據庫,
REDO01.LOG
?這個文件需要被歸檔,但由于 FRA 已滿,歸檔失敗
- 含義:這指明了具體是哪個聯機日志文件出了問題。它告訴數據庫,
數據庫在?OPEN
?階段需要 LGWR 進程寫入重做日志。REDO01.LOG
?寫滿了,需要被歸檔。ARCn 進程嘗試將其歸檔到 FRA,但發現 FRA 空間已滿,歸檔失敗(ORA-19809)。因為歸檔失敗,REDO01.LOG
?無法被復用,LGWR 進程沒有可用的日志文件可以寫入,數據庫活動被完全阻塞,最終導致數據庫實例崩潰,并斷開你的連接(ORA-03113)。
解決方案:
方案一:增加 FRA 的大小(最推薦,一勞永逸)
這是最直接、最根本的解決方法。如果你的磁盤有足夠空間,直接擴大 FRA 的容量。
- 首先,你需要啟動數據庫到 MOUNT 狀態。因為數據庫現在無法 OPEN,但 MOUNT 狀態是允許你修改這些參數的。
?不能正常啟動后臺日志就會記入異常在log.xml中.
務必將數據庫服務啟動數據實例到mout狀態,這樣才可以有后續操作,如下圖:
修改歸檔日志存儲大小
這樣數據庫就正常打開了.但是不能一味的擴大數據庫歸檔日志的儲存大小還要將歸檔日志給清除掉.并且進行設置當日志被歸檔兩次后就將其刪除(configure archivelog deletion policy to backed up 2 times;).將Oracle數據庫重置成mount狀態,然后重新打開一個命令行窗口使用Oracle自帶的rman工具登入rman target sys/(用戶自己對應的密碼)后進行清理.
設置一個保留策略,例如,只保留最近7天的備份和歸檔日志:
? ? -- 設置恢復窗口為7天
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
? ? -- 或者,設置保留2份備份
-- CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
? ? -- 啟用自動刪除過期的備份和歸檔日志
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DISK;
這個策略的含義是:**“當一個歸檔日志已經被成功備份到磁盤至少1次后,它就可以被自動刪除了”**。設置好策略后,你需要定期運行 RMAN 的 `DELETE OBSOLETE` 命令來清理這些過期的文件。這個命令通常可以放在一個定時任務(如 Windows 的計劃任務或 Linux 的 Cron)中每天執行。
? ??? ? -- 刪除所有根據保留策略判斷為“過時”的備份和歸檔日志
DELETE NOPROMPT OBSOLETE;