1. 程式人生 > >ORA-03113錯誤比較全面的分析

ORA-03113錯誤比較全面的分析

ORA-03113錯誤分析

版本歷史
2003-5-22  v0.1  Created by Fenng  ([email protected])
版權宣告
轉載請註明作者及出處

----------------------
前言
----------------------

每一個DBA在進行資料庫管理的過程中不可避免的要遇到形形色色的錯誤(ORA-xxxx).有些錯
誤由於頻繁出現、原因複雜而被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引起的錯誤
--        空間不夠
--        防火牆的問題
--        其它原因

在開始解決問題之前,作如下幾件事情:

1、        回憶一下在出現錯誤之前你都做了什麼操作,越詳細越好;
2、        檢視background_dump_dest目錄中的alertSID.log檔案也是你要做的事情;
3、     Google一下,在網際網路上有很多資訊等著你去發現,不要什麼都問別人.當然,
如果你找到了一些對你非常有幫助的東西――這篇文件就不用看了,別耽誤你的時間,呵呵.

---------------------------------------------------------------------
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

        解決辦法有兩個:
        1修改核心引數,加大相應核心引數的值(推薦);
        2減小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的一個大引數值 */
我的軟體環境:
Windows 2000 Version 5.0 Service Pack 3, CPU type 586
ORACLE RDBMS Version: 8.1.7.0.0.
-------------------------------------------------------------------------------


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

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

------------------------------------------------------------------------
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沒有安裝或正確執行也會導致錯誤.

--------------------------------------------
客戶端通訊不能正確處理
--------------------------------------------

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

檢查網路是否通暢

Windows平臺的常見問題:
在Windows平臺建立資料庫的時侯,如果出現該問題可以考慮用如下的方法:
首先檢查本地網路設定.檢視網路上是否有同名的結點或有衝突的IP.如果問題依舊,可以保
守的用下面的方法:
1.        禁用網絡卡:將本地連線狀態改為禁用;
2.        將sqlnet.ora檔案開啟(以記事本形式)將nts驗證註釋掉:
#SQLNET.AUTHENTICATION_SERVICES= (NTS).
3.        建立資料庫;
4.        建立成功後,恢復本地連線.

----------------------------------------------------------------------------
資料庫伺服器崩潰/作業系統崩潰/程序被Kill
----------------------------------------------------------------------------

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

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

------------------------------------
Oracle 內部錯誤/ Bug
------------------------------------

如果檢視background_dump_dest目錄中的alert.log發現有無ora-600等錯誤,可以到Metalin
k站點上檢視具體資訊及其解決方案.一般情況下要打軟體補丁.
特定SQL、PL/SQL引起的錯誤
嘗試把SQL進行分開執行,也可以用SQL_TRACE來進行跟蹤,找到導致問題的SQL語句:
在SQLPlus下:
ALTER SESSION SET SQL_TRACE TRUE;

SQL語句中的非法字元和不合理的處理結果偶爾會帶來問題.

------------------------
系統空間不夠
------------------------

任何時侯都要確保資料庫系統有足夠的空間.如果 USER_DUMP_DEST
和BACKGROUND_DUMP_DEST沒有剩餘空間的話,會導致此問題.此外,如果打開了審計,AUDIT目
錄要由足夠的空間.如果激活了Trace的話,Trace目錄要由足夠的空間.

Dave Wotton的文件表明,在對錶進行插入資料的時侯,如果檔案超過了2G
(而檔案系統有2G限制),會導致該問題.

-------------------------
防火牆的問題
-------------------------

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

------------------------
其它方面說明
------------------------

導致這個錯誤的原因有很多種,上面列到的只是一些典型情況.經常去一些資料庫技術論壇可
能會有幫助.比如說ITPUB(
http://www.itpub.net)、C NOUG(http://www.CN OUG.org)等.

---------------------------------
參考資訊/更多閱讀
---------------------------------

http://Metalink.oracle.com         
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

http://www.google.com/grphp?hl=zh-CN 
Google新聞組

http://www.jlcomp.demon.co.uk/faq/ORA-3113.html
技術專家Jonathan Lewis的站點上的一個FAQ

http://home.clara.net/dwotton/dba/ora3113.htm
Dave Wotton總結的一個很經典的文件.