關於ora-03113 ora03114 的一例處理

germany006發表於2014-02-23

  昨天在給應用系統做升級的時候,指令碼老是執行到一半,就出現,已斷開資料庫連線,跟蹤後發現,執行到中間回出現,ora-03113錯誤(通訊通道的檔案結束),接著就是ora-03114(失去oracle連線).

1.懷疑指令碼問題,語句有問題,仔細研究下,沒問題.

2.網路問題.換臺機器還是一樣.

3.換了個庫試下,還是一樣.

4.查了下 失效物件,有一些失效物件,compile之,結果得以解決.

總結: 一些失效的物件也會引起ora-03113 ora-3114錯誤


這裡引用大版:FENNY做的一些總結

每一個DBA在進行資料庫管理的過程中不可避免的要遇到形形色色的錯誤(ORA-1547 ,ORA-904,ORA-1578 ......)。有些錯誤由於頻繁出現、原因複雜而被 Oracle DBA 們戲稱之為"經典的錯誤"。其中ORA-3113 "end of file on communication channel" 就是這樣的一個。

我們可以簡單的把這個錯誤理解為Oracle客戶端程式和資料庫後臺程式連線中斷。不過,導致這個錯誤的原因實際上有很多種:對資料庫設定不當、任何能導致資料庫後臺程式崩潰的行為都可能產生這個錯誤。這個錯誤的出現還經常伴隨著其它錯誤,比如說:
ORA-1034 ORACLE not available
此外,該錯誤出現的場景複雜,可能出現在:

啟動的Oracle的時侯
試圖建立資料庫的時侯
試圖對資料庫進行連線的時侯
在客戶端正在執行SQL/PL/SQL的時侯
備份/恢復資料庫的時侯
其它一些情況下......
在論壇上也時常可以看到初級DBA對這個問題的求救。在這裡簡單的對該問題進行一下整理。

錯誤原因種種

根據網路上大家反映的情況來看,錯誤原因大約有這些:
Unix核心引數設定不當
Oracle執行檔案許可權不正確/環境變數問題
客戶端通訊不能正確處理
資料庫伺服器崩潰/作業系統崩潰/程式被kill
Oracle 內部錯誤
特定SQL、PL/SQL引起的錯誤
空間不夠
防火牆的問題
其它原因
在開始解決問題之前,作如下幾件事情:
回憶一下在出現錯誤之前你都做了什麼操作,越詳細越好;
檢視 background_dump_dest 目錄中的 alertSID.log 檔案也是你必須要的事情;
用 Google 搜尋一下,在網際網路上有很多資訊等著你去發現,不要什麼都問別人。
當然, 如果你找到了一些對你更有幫助的東西--這篇文件就不用看了 :-)




錯誤原因情景分析
1) Unix核心引數設定不當 / init引數設定不當

如果資料庫在安裝過程中沒有設定正確的作業系統核心變數,可能在安裝資料庫檔案的時侯沒甚麼問題,在建立資料庫的時侯常常會出現03113錯誤。和此有關的另一個原因是init.ora 引數檔案中的processes引數指定了不合理的值,啟動資料庫導致錯誤出現(當然這個歸根到底也是核心引數的問題).這個錯誤資訊一般如下:

ORA-03113: end-of-file on communication channel
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist解決辦法有兩個:

修改核心引數,加大相應核心引數的值(推薦)
減小init.ora引數的Processes的值。
需要注意的是:


SEMMSL必須設定為至少要10 + '程式數的最大值'
SEMMNS 也依賴於每個資料庫上的程式引數值。


注:這個錯誤型別只在Unix平臺上出現。在Windows上如果processes的值過大,則會出現類似如下的錯誤:



ORA-00068: invalid value 24200001 for parameter max_rollback_segments,must be between 2 and 65535 /* 此時指定的引數值超過了65535 */
或者

ORA-27102: out of memory 
/* 小於65535的一個大引數值 */

在特定平臺上更改核心引數可能會有差別,請參考Oracle Technet(
) 上的安裝文件。對特定Unix平臺的安裝文件也有對核心引數意義的解釋。



Init.ora 中的引數如果設定不當,會產生該錯誤。有經驗表明:shared_pool_size 引數設定過小會出現錯誤,此外 timed_statistics=true 的設定也會帶來問題。


2) Oracle執行檔案許可權不正確/環境變數問題

這個問題只出現在Unix平臺上。常見情況是有的時侯管理員為了方便而使用 Unix 的 tar 命令處理過的壓縮包進行的安裝,或者是系統管理員指定了額外的 OS 使用者也可以管理資料庫卻沒有指定正確的環境變數。

Oracle執行檔案在$ORACLE_HOME/bin目錄下,如果出現問題,應該用如下Unix類似命令來糾正:

#chmod 7755 $ORACLE_HOME/bin/oracle
有的時侯要對 Oracle 軟體進行 relink 操作。

在Unix上透過cp複製安裝的時候,常常會出現環境變數的問題,和個別執行程式連線問題。 LD_LIBRARY_PATH如果設定的不正確會導致問題,在這種情況下,需要對Oracle進行relink。如果可執行檔案oralcle被破壞,也要對其relink。如果安裝了並行伺服器選項而 Distributed Lock Manager 沒有安裝或正確執行也會導致錯誤。

3) 客戶端通訊不能正確處理

3.1.SQL*Net驅動器的問題.

如果使用的版本比較低的驅動器,請更換到新版本的驅動。SQL*Net 的驅動沒有連線到Oracle可執行檔案會導致錯誤。

3.2.檢查TCP/IP網路是否通暢;

3.3.Windows平臺的常見網路問題:

在Windows平臺建立資料庫的時侯,如果出現該問題可以考慮用如下的方法:

首先檢查本地網路設定.檢視網路上是否有同名的結點或有衝突的IP.如果問題依舊,可以保守的用下面的方法:
禁用網路卡:將本地連線狀態改為禁用;
將sqlnet.ora檔案開啟(以記事本形式)將nts驗證註釋掉:
#SQLNET.AUTHENTICATION_SERVICES= (NTS)
建立資料庫;
建立成功後,恢復本地連線;
4) 資料庫伺服器崩潰/作業系統崩潰/程式被異常的Kill


在連線過程中,如果Oracle資料庫的伺服器崩潰或者資料庫所在的作業系統崩潰,就會出現這 個錯誤,Oracle Server崩潰的原因可能因為主要後臺程式死掉,被錯誤的進行了Kill操作。如果是這個原因還是比較容易解決的。此外,和OS有關的應用程式存在記憶體洩漏(或者有病毒)的時侯也會導致Oracle後臺程式問題。推薦排錯步驟:

1、檢視應用軟體相關程式是否正常執行;
2、 檢視有無記憶體洩漏;
3、 查殺病毒;
4、 確定系統管理員沒有進行誤操作;
5、 確定無駭客入侵行為;
6、 其它不確定因素......

5) Oracle 內部錯誤 / Bug


如果檢視background_dump_dest目錄中的alert.log發現有ora-600/ora-07445等錯誤,可以到Metalink站點上檢視具體資訊及其解決方案。一般情況下要打軟體補丁。


6) 特定SQL、PL/SQL引起的錯誤


嘗試把SQL進行分開執行,也可以用SQL_TRACE來進行跟蹤,找到導致問題的SQL語句。在SQLPlus下:

ALTER SESSION SET sql_trace=TRUE;SQL語句中的非法字元和不合理的處理結果,甚至一些不可解釋的原因偶爾會帶來問題.


7) 系統空間不夠


任何時侯都要確保資料庫系統有足夠的空間.如果 USER_DUMP_DEST和BACKGROUND_DUMP_DEST沒有剩餘空間的話,會導致此問題.此外,如果開啟了審計,AUDIT目錄要由足夠的空間.如果啟用了Trace的話,Trace目錄要由足夠的空間.Dave Wotton的文件表明,在對錶進行插入資料的時侯,如果檔案超過了2G (而檔案系統有2G限制),會導致該問題.


8) 防火牆的問題


如果資料要透過防火牆,請聯絡系統管理員,詢問是否對資料庫資料進行了過濾或者是突然禁止了通訊埠。如本地安裝有個人防火牆,請檢查本地設定。


*) 其它方面說明

導致這個錯誤的原因有很多種,上面列到的只是一些典型情況。去一些資料庫技術論壇求助可能會得到更多幫助。比如說*****(
)等

參考資訊
Metalink -
Oracle的技術支援站點,要有CSI號碼才可以登入。參考Note編號:

Note:17613.1 ORA-3113 on Unix - What Information to Collect
NOTE:131207.1 How to Set UNIX Environment Variables
Note:131321.1 How to Relink Oracle Database Software on UNIX
Note:22080.1 An Introduction to Error Message Articles

技術專家Jonathan Lewis的站點上的一則FAQ

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

相關文章