Oracle數據庫歸檔日志滿后造成系統宕機解決過程


 

1、問題過程經歷:

     客戶反應 數據庫服務器斷電后,導致無法正常連接,剛開始沒有考慮到是oracle數據庫歸檔日志滿了造成了該原因。

      (1)、通過 Net Manager去測試,發現是ora-12514的問題,認為可能是監聽服務異常導致的,但是發現oracleservice服務和listener監聽服務都能夠正常啟動,於是沿着這個問題不斷挖掘,修改NETWORK文件夾下的listener.ora和tnsnames.ora兩個文件,追加了orcl的sid_desc

listener.ora

 

 (2)、ora-12514問題解決后,幕后真凶顯露了出來,ORA-01034”和“ORA-27101”,如下圖:

 

 

 

然后就就通過命令提示符去登陸Oracle,去查看怎么回事,然后問題進一步出現,錯誤“ORA-03113:通信通道的文件結尾進程 ID:6320 回話 ID :191序列號:3”。

 

 

 

 

 (3)問題根源:Oracle出現錯誤,於是去錯誤日志里去找問題根源:F:\app\Administrator\diag\rdbms\orcl\orcl\trace文件夾下找到orcl_arc0_9552.trc文件,打開顯示錯誤日志:

 

 

 

 

 

從這里我們發現了問題的根源:“ORA-19815: 警告: db_recovery_file_dest_size 字節 (共 4102029312 字節) 已使用100.00%, 尚有 0 字節可用。db_recovery_file_dest_size也叫歸檔日志空間不足導致的,既然找到問題的根源,那解決起來也就容易了。

 

解決途徑

空間小,那擺在我們面前辦法就是,一個是將空間設置大點,另一個就是將多余的文件刪除掉即可,那么我們就將這兩個辦法都使用一下。

(1)、通過命令窗口:--------設置歸檔日志空間的大小

使用sql命令查看:

Sql>sqlplus / as nolog;---------------------啟動sql*Plus

Sql> connect sys/password@orcl as sysdba;

Sql> archive log list;

SQL> alter system set db_recovery_file_dest_size=10G scope=both; ---增大閃回恢復區。

SQL> alter database open; 重新打開數據庫

SQL> show parameter db_recovery_file_dest_size;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size           big integer 3G
SQL>

 

/*-------------------------完畢------------------------*/

(2)、通過命令窗口:---通過rman工具窗口刪除歸檔日志

1.指定數據庫實例

 

C:/Documents and Settings/Administrator>SET ORACLE_SID =orcl

 

2.連接數據庫

 

C:/Documents and Settings/Administrator>RMAN TARGET SYS/password@orcl

 

3.查看歸檔日志的狀態

 

RMAN> list archivelog all; -- 運行這個命令可以把無效的expired的archivelog標出來。

RMAN>delete expired archivelog all;  -- 直接全部刪除過期的歸檔日志。

RMAN>delete noprompt archivelog until time "sysdate -3";  -- 也可以直接用一個指定的日期來刪除。

 

重新打開數據庫:

 

SQL> alter database open;

 

Database altered.

 

 

 

 

 (3)優化設置:
指定retention的策略,使得archivelog不至於這樣增加

1)、RMAN>configure retention policy to recovery window of 7 days;- -即刪除7天前的歸檔日志 

2)、SQL>alter system set db_recovery_file_dest_size=10G scope=both; ---增大閃回恢復區。

3)、把archivelog_dest指定到沒有限制的地方

SQL>alter system log_archive_dest='/home/oracle';

SQL> alter database open;

然后重啟數據庫后,系統可以正常使用了。

 

 

歸檔日志其實是為了方便我們在恢復數據庫時使用的,但是有時候這些歸檔日志有時確實會給我們帶來一點點的小麻煩,所以這些歸檔日志還是需要我們去注意的。

4)、但是,由於啟用了歸檔日志,即便設置成了200G的使用空間,按照每天2G的數據增長量,也就3個月數據就能達到了,需要定制任務定時清理歸檔日志,而刪除歸檔日志只有在RMAN里才能進行,於是在數據庫服務器上新建一個bat文件(文件名隨意)

編輯此文件為:

rman target 'sys/password' cmdfile 'd:\cmd.txt'―――此處路徑、文件名隨意

在命令中對應的路徑下新建cmd.txt文件,打開編輯此文件,

DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

然后在Windows計划任務里添加任務,指定每天定時執行此bat文件。

經過一周的運行,歸檔日志每天定時被清理。系統正常。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM