1. 程式人生 > 其它 >Oracle錯誤——ORA-03113:通訊通道的檔案結尾 解決辦法

Oracle錯誤——ORA-03113:通訊通道的檔案結尾 解決辦法

該錯誤我是還原資料庫之後出現的

建議的問題跟進方法是

先檢視oracle的日誌,檢視的方法

select * from v$diag_info

先看日誌檔案儲存在哪,根據路徑找到檔案

檢視檔案內容,找到實際的ORA-**** 錯誤程式碼

如果實際的錯誤程式碼跟我發的這個一樣,那麼可以試試

alter system set "_optimizer_join_elimination_enabled"=false scope=both;

_optimizer_connect_by_cost_based 為使用基於成本的轉換進行連線,預設為true scope 就是這個引數修改的SQL的影響的範圍,總共有三個值:both、memory,spfile。

scope=both修改後當前起作用,下次重啟資料庫也起作用
scope=memory修改後當前就起作用,重啟資料庫不起作用,就是記憶體裡面起作用了,不持久化
scope=spfile修改後當前不起作用,下次重啟資料庫才起作用,就是寫入檔案了,重啟後才能載入;

今天跟往常一樣,登陸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也叫歸檔日誌空間不足導致的,既然找到問題的根源,那解決起來也就容易了。

 解決途徑

空間小,那擺在我們面前辦法就是,一個是將空間設定大點,另一個就是將多餘的檔案刪除掉即可,那麼我們就將這兩個辦法都使用一下。

通過命令視窗:

--------設定歸檔日誌空間的大小

  

  1. sqlplus / as sysdba
  2.  shutdown abort ----關閉程序
  3.  startup mount ---- 裝載資料庫
  4.  select * from v$recovery_file_dest; ---查詢歸檔日誌
  5.  db_recovery_file_dest_size=10737418240; --設定歸檔日誌空間為10G
  6.  Exit ---到這裡空間大小已經設定完成

--------刪除歸檔日誌

  

  1. rmantarget / -----進入rman工具視窗
  2.  RMAN>crosscheckarchivelog all; --執行這個命令可以把無效的expired的archivelog標出來。
  3.  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並不知道這些檔案已經不存在了。所以還是要通過命令視窗去執行刪除這些檔案的命令。

後記

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