首頁(yè) > 開(kāi)發(fā) > 其他 > 正文

ora-01034錯誤解決方法及詳細分析

2019-11-05 09:02:22
字體:
來(lái)源:轉載
供稿:網(wǎng)友

  前言
  每一個(gè)DBA在進(jìn)行數據庫治理的過(guò)程中不可避免的要碰到形形色色的錯誤(ORA-xxxx)。有些錯誤由于頻繁出現、原因復雜而被DBA們戲稱(chēng)之為"經(jīng)典的錯誤"。其中ORA-3113 "end of fileon communication channel" 就是這樣的一個(gè).
  
  我們可以簡(jiǎn)單的把這個(gè)錯誤理解為Oracle客戶(hù)端進(jìn)程和數據庫后臺進(jìn)程連接中斷。不過(guò),導致這個(gè)錯誤的原因實(shí)際上有很多種,對數據庫設置不當、任何能導致數據庫后臺進(jìn)程崩潰的行 為都可能產(chǎn)生這個(gè)錯誤.這個(gè)錯誤的出現還經(jīng)常伴隨著(zhù)其它錯誤,比如說(shuō):
  
  ORA-1034 ORACLE not available。
  
  此外,該錯誤出現的場(chǎng)景復雜,可能出現在:
  
  啟動(dòng)的Oracle的時(shí)侯;
  試圖創(chuàng )建數據庫的時(shí)侯;
  試圖對數據庫進(jìn)行連接的時(shí)侯;
  在客戶(hù)端正在運行SQL/PL/SQL的時(shí)侯;
  備份/恢復數據庫的時(shí)侯;
  其它一些情況下......
  在論壇上也時(shí)??梢钥吹匠跫塂BA對這個(gè)問(wèn)題的求救. 在這里簡(jiǎn)單的對該問(wèn)題進(jìn)行一下整理.不當之處,請多指教!
  
  錯誤原因種種
  根據網(wǎng)絡(luò )上大家反映的情況來(lái)看,錯誤原因大約有這些:
  
  Unix核心參數設置不當
  Oracle執行文件權限不正確/環(huán)境變量問(wèn)題
  客戶(hù)端通信不能正確處理
  數據庫服務(wù)器崩潰/操作系統崩潰/進(jìn)程被kill
  Oracle 內部錯誤
  特定SQL、PL/SQL引起的錯誤
  空間不夠
  防火墻的問(wèn)題
  其它原因
  在開(kāi)始解決問(wèn)題之前,作如下幾件事情:
  
  回憶一下在出現錯誤之前你都做了什么操作,越具體越好;查看background_dump_dest目錄中的alertSID.log文件也是你要做的事情;Google一下,在互聯(lián)網(wǎng)上有很多信息等著(zhù)你去發(fā)現,不要什么都問(wèn)別人.當然, 假如你找到了一些 對你更有幫助的東西――這篇文檔就不用看了 :)
  
  Unix核心參數設置不當/ init參數設置不當
  
  假如數據庫在安裝過(guò)程中沒(méi)有設定正確的操作系統核心變量,可能在安裝數據庫文件的時(shí)侯沒(méi)甚么問(wèn)題,在創(chuàng )建數據庫的時(shí)侯經(jīng)常會(huì )出現03113錯誤.和此有關(guān)的另一個(gè)原因是init.ora參數文件中的PRocesses參數指定了不合理的值,啟動(dòng)數據庫導致錯誤出現(當然這個(gè)歸根到底也是核心參數的問(wèn)題).
  
  這個(gè)錯誤信息一般如下:
  
  ORA-03113: end-of-file on communication channel
  ORA-01034: ORACLE not available
  ORA-27101: shared memory realm does not exist
  
  解決辦法有兩個(gè):
  
  1修改核心參數,加大相應核心參數的值(推薦);
  2減小init.ora參數的Processes的值.
  
  需要注重的是:
  
  SEMMSL必須設定為至少要10 + 進(jìn)程數的最大值.
  SEMMNS 也依靠于每個(gè)數據庫上的進(jìn)程參數值.
  -------------------------------------------------------------------------------
  注:
  這個(gè)錯誤類(lèi)型只在Unix平臺上出現.在Windows上假如processes的值過(guò)大,則會(huì )出現:
  
  ORA-00068: invalid value 24200001 for parameter max_rollback_segments, must be
  between 2 and 65535
  
  /* 此時(shí)指定的參數值超過(guò)了65535 */
  
  或者
  
  ORA-27102: out of memory 
  
  /* 小于65535的一個(gè)大參數值 */
  
  我的軟件環(huán)境:
  
  windows 2000 Version 5.0 Service Pack 3, CPU type 586
  ORACLE RDBMS Version: 8.1.7.0.0.
  -------------------------------------------------------------------------------
  在特定平臺上更改核心參數可能會(huì )有差別,請參考Oracle Technet(http://otn.oracle.com)上的安裝文檔.對特定Unix平臺的安裝文檔也有對核心參數意義的解釋.
  
  Init.ora中的參數假如設置不當,會(huì )產(chǎn)生該錯誤.有經(jīng)驗表明:shared_pool_size設置過(guò)小會(huì )出現錯誤,此外timed_statistics=true的設置也會(huì )帶來(lái)問(wèn)題.
  
  Oracle執行文件權限不正確/環(huán)境變量問(wèn)題
  
  這個(gè)問(wèn)題只出現在Unix平臺上.常見(jiàn)情況是有的時(shí)侯治理員為了方便而使用Unix的tar命令處理過(guò)的壓縮包進(jìn)行的安裝,或者是系統治理員指定了額外的OS用戶(hù)也可以治理數據庫卻沒(méi)有指定正確的環(huán)境變量.
  
  Oracle執行文件在$ORACLE_HOME/bin目錄下,假如出現問(wèn)題,應該用如下Unix類(lèi)似命令來(lái)糾正 :
  
  chmod 7755 $ORACLE_HOME/bin/oracle
  
  有的時(shí)侯要對Oracle進(jìn)行relink操作.
  在Unix上通過(guò)cp拷貝安裝的時(shí)候,經(jīng)常會(huì )出現環(huán)境變量的問(wèn)題,和個(gè)別執行程序連接問(wèn)題.LD_LIBRARY_PATH假如設置的不正確會(huì )導致問(wèn)題,在這種情況下,需要對Oracle進(jìn)行relink.假如可執行文件oralcle被破壞,也要對其relink.
  
  假如安裝了并行服務(wù)器選項而Distributed Lock Manager沒(méi)有安裝或正確運行也會(huì )導致錯誤. 客戶(hù)端通信不能正確處理
  
  SQL*Net驅動(dòng)器的問(wèn)題:
  假如使用的版本比較低的驅動(dòng)器,請更換到新版本的驅動(dòng).SQL*Net 的驅動(dòng)沒(méi)有連接到Oracle可執行文件會(huì )導致錯誤.
  
  檢查網(wǎng)絡(luò )是否通暢
  Windows平臺的常見(jiàn)問(wèn)題:
  
  在Windows平臺創(chuàng )建數據庫的時(shí)侯,假如出現該問(wèn)題可以考慮用如下的方法:首先檢查本地網(wǎng)絡(luò )設置.查看網(wǎng)絡(luò )上是否有同名的結點(diǎn)或有沖突的ip.假如問(wèn)題依舊,可以保守的用下面的方法:
  
  1. 禁用網(wǎng)卡:將本地連接狀態(tài)改為禁用;

  2. 將sqlnet.ora文件打開(kāi)(以記事本形式)將nts驗證注釋掉:
  <&>#SQLNET.AUTHENTICATION_SERVICES= (NTS).
  3. 創(chuàng )建數據庫;
  4. 創(chuàng )建成功后,恢復本地連接.
  數據庫服務(wù)器崩潰/操作系統崩潰/進(jìn)程被Kill
  
  在連接過(guò)程中,假如Oracle數據庫的服務(wù)器崩潰或者數據庫所在的操作系統崩潰,就會(huì )出現這個(gè)錯誤.Oracle Server崩潰的原因可能因為主要后臺進(jìn)程死掉.被錯誤的進(jìn)行了Kill操作.假如是這個(gè)原因還是比較輕易解決的.此外,和OS有關(guān)的應用程序存在內存泄漏(或者有病毒)的時(shí)侯也會(huì )導致Oracle后臺程序問(wèn)題.
  
  推薦排錯辦法:
  1、 查看應用軟件相關(guān)進(jìn)程是否正常運行;
  2、 查看有無(wú)內存泄漏;
  3、 查殺病毒;
  4、 確定系統治理員沒(méi)有進(jìn)行誤操作;
  5、 確定無(wú)黑客入侵行為.
  6、 其它不確定因素......
  Oracle 內部錯誤/ Bug
  
  假如查看background_dump_dest目錄中的alert.log發(fā)現有無(wú)ora-600等錯誤,可以到Metalin k站點(diǎn)上查看具體信息及其解決方案.一般情況下要打軟件補丁.
  
  特定SQL、PL/SQL引起的錯誤
  嘗試把SQL進(jìn)行分開(kāi)執行,也可以用SQL_TRACE來(lái)進(jìn)行跟蹤,找到導致問(wèn)題的SQL語(yǔ)句:在SQLPlus下:
  
  ALTER session SET SQL_TRACE=TRUE;
  
  SQL語(yǔ)句中的非法字符和不合理的處理結果偶然會(huì )帶來(lái)問(wèn)題.
  
  系統空間不夠
  任何時(shí)侯都要確保數據庫系統有足夠的空間.假如 USER_DUMP_DEST和BACKGROUND_DUMP_DEST沒(méi)有剩余空間的話(huà),會(huì )導致此問(wèn)題.此外,假如打開(kāi)了審計,AUDIT目錄要由足夠的空間.假如激活了Trace的話(huà),Trace目錄要由足夠的空間.
  
  Dave Wotton的文檔表明,在對表進(jìn)行插入數據的時(shí)侯,假如文件超過(guò)了2G(而文件系統有2G限制),會(huì )導致該問(wèn)題.
  
  防火墻的問(wèn)題
  假如數據要通過(guò)防火墻,請聯(lián)系系統治理員,詢(xún)問(wèn)是否對數據庫數據進(jìn)行了過(guò)濾或者是忽然禁止了通行端口.如本地安裝有個(gè)人防火墻,請檢查本地設置.

發(fā)表評論 共有條評論
用戶(hù)名: 密碼:
驗證碼: 匿名發(fā)表