起源
今天跟往常一樣,登陸PL/SQL,確登陸失敗,出現一個錯誤“ORA-01034”和“ORA-27101”如圖:
然后就就通過命令提示符去登陸Oracle,去查看怎么回事,然后問題進一步出現。錯誤“ORA-03113:通信通道的文件結尾 進程 ID:6320 回話 ID :191 序列號:3”。
問題根源
Oracle出現錯誤。於是去錯誤日志里去找問題根源:在 e:\app\kang\diag\rdbms\oracle\oracle\trace\目錄下找到oracle_ora_6320.trc文件。打開顯示錯誤日志:
Trace filee:\app\kang\diag\rdbms\oracle\oracle\trace\oracle_ora_6320.trc Oracle Database 11gEnterprise Edition Release 11.2.0.1.0 - 64bit Production With thePartitioning, OLAP, Data Mining and Real Application Testing options Windows NT VersionV6.1 Service Pack 1 CPU : 4 - type 8664, 2 PhysicalCores Process Affinity : 0x0x0000000000000000 Memory (Avail/Total):Ph:2805M/6087M, Ph+PgF:6761M/12173M Instance name: oracle Redo thread mountedby this instance: 1 Oracle processnumber: 19 Windows thread id:6320, image: ORACLE.EXE (SHAD) *** 2014-08-1608:18:55.461 *** SESSIONID:(191.3) 2014-08-16 08:18:55.461 *** CLIENT ID:()2014-08-16 08:18:55.461 *** SERVICE NAME:()2014-08-16 08:18:55.461 *** MODULENAME:(sqlplus.exe) 2014-08-16 08:18:55.461 *** ACTION NAME:()2014-08-16 08:18:55.461 ORA-19815: 警告:db_recovery_file_dest_size 字節 (共 4102029312 字節) 已使用 100.00%, 尚有 0 字節可用。 ************************************************************************ You have followingchoices to free up space from recovery area: 1. Consider changingRMAN RETENTION POLICY. If you are using Data Guard, then consider changing RMAN ARCHIVELOGDELETION POLICY. 2. Back up files totertiary device such as tape using RMAN BACKUP RECOVERY AREA command. 3. Add disk space andincrease db_recovery_file_dest_size parameter to reflect the new space. 4. Delete unnecessaryfiles using RMAN DELETE command. If an operating system command was used to delete files,then use RMAN CROSSCHECK and DELETE EXPIRED commands. ************************************************************************ ORA-19809:超出了恢復文件數的限制 ORA-19804: 無法回收33961984 字節磁盤空間 (從 4102029312 限制中) *** 2014-08-1608:18:55.502 4132 krsh.c ARCH: Error 19809Creating archive log file to'E:\APP\KANG\FLASH_RECOVERY_AREA\ORACLE\ARCHIVELOG\2014_08_16\O1_MF_1_159_%U_.ARC' *** 2014-08-1608:18:55.502 2747 krsi.c krsi_dst_fail: dest:1err:19809 force:0 blast:1 DDE: Problem Key 'ORA312' was flood controlled (0x1) (no incident) ORA-00312: 聯機日志 3 線程1: 'E:\APP\KANG\ORADATA\ORACLE\REDO03.LOG' ORA-16038: 日志 3sequence# 159 無法歸檔 ORA-19809:超出了恢復文件數的限制 ORA-00312: 聯機日志 3 線程1: 'E:\APP\KANG\ORADATA\ORACLE\REDO03.LOG' *** 2014-08-1608:18:55.565 USER (ospid: 6320):terminating the instance due to error 16038
從這里我們發現了問題的根源:“
ORA-19815: 警告: db_recovery_file_dest_size 字節 (共 4102029312 字節) 已使用100.00%, 尚有 0 字節可用。” 是db_recovery_file_dest_size也叫歸檔日志空間不足導致的。既然找到問題的根源,那解決起來也就easy了。
解決途徑
空間小,那擺在我們面前辦法就是,一個是將空間設置大點,還有一個就是將多余的文件刪除掉就可以。那么我們就將這兩個辦法都使用一下。
通過命令窗體:
--------設置歸檔日志空間的大小
sqlplus / as sysdba shutdown abort ----關閉進程 startup mount ---- 裝載數據庫 select * from v$recovery_file_dest; ---查詢歸檔日志 db_recovery_file_dest_size=10737418240; --設置歸檔日志空間為10G Exit ---到這里空間大小已經設置完畢
--------刪除歸檔日志
rmantarget / -----進入rman工具窗體 RMAN>crosscheckarchivelog all; --執行這個命令能夠把無效的expired的archivelog標出來。 RMAN>deletenoprompt archivelog until time "sysdate -3"; -- -即刪除3天前的歸檔日志
到這里就徹底ok了。
接下來又一次打開數據庫:正常使用。
在刪除歸檔文件里有一點要注意,通過命令窗體顯示顯示歸檔文件都在E:\app\kang\flash_recovery_area\oracle\ARCHIVELOG 下。可是我們不能手工在操作系統中直接把這些文件刪除掉,這是由於在controlfile中記錄着每個archivelog的相關信息,當我們在OS中刪除這些文件后。我們的controlfile中仍然記錄着這些archivelog的信息,因此在Oracle的OEM管理器中還會存在這些日志。
由於當我們手工清除archive文件夾下的文件后,這些記錄並沒有被我們從controlfile中清除掉。也就是oracle並不知道這些文件已經不存在了。
所以還是要通過命令窗體去運行刪除這些文件的命令。
后記
歸檔日志事實上是為了方便我們在恢復數據庫當使用。但有時這些歸檔日志有時確實給我們的小問題一點點,因此,這些存檔日志,或者需要我們注意。