2010-9-3號 ---- Oracle11g ORA-3136 error solution(ORA-3136)錯誤解決辦法

今天又遇到幾天前遇到的一個Oracle連接問題,崩潰,因爲前邊我已經遇到了這個問題,當時沒有解決,也花了不少時間,搞來搞去最後還是不行,今天查找問題根源時:

又去看了一下各個日誌,最後看了一下alert/log.xml發現日誌文件裏重複很多遍的一個錯誤,內容如下:

 

 

<msg time='2010-09-03T01:37:13.578+08:00' org_id='oracle' comp_id='clients'

 type='UNKNOWN' level='16' host_id='PC-20100723HCXR'

 host_addr='192.168.1.153'>

 <txt>    nt OS err code: 0

 </txt>

</msg>

到網上去搜解決辦法,最後找到了一個解決辦法,英文的這裏先將大致步驟翻譯一下,如果覺得翻譯的不好,大家就直接去點本文最後的英文連接查看,推薦查看原文。畢竟俺不是很專業的英文翻譯人士。

 

好了快來看一下吧。

 

同步記錄在sqlnet.log 如下錯誤:

 

 

Fatal NI connect error 12518, connecting to:

 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.153)(PORT=1521))(CONNECT_DATA=(SID=orcl)(CID=(PROGRAM=D:\app\product\11.2.0\dbhome_1\bin\emagent.exe)(HOST=PC-20100723HCXR)(USER=SYSTEM))))

 

  VERSION INFORMATION:

TNS for 32-bit Windows: Version 11.2.0.1.0 - Production

Windows NT TCP/IP NT Protocol Adapter for 32-bit Windows: Version 11.2.0.1.0 - Production

  Time: 03-9月 -2010 00:45:29

  Tracing not turned on.

  Tns error struct:

    ns main err code: 12564

    TNS-12564: TNS: 拒絕連接

    ns secondary err code: 0

    nt main err code: 0

    nt secondary err code: 0

    nt OS err code: 0

英文引文中的錯誤如下:

VERSION INFORMATION: 
TNS for Linux: Version 10.2.0.2.0 - Production 
Oracle Bequeath NT Protocol Adapter for Linux: Version 10.2.0.2.0 - Production 
TCP / IP NT Protocol Adapter for Linux: Version 10.2.0.2.0 - Production 
Time: 19-JUL-2006 11:25:26 
Tracing not turned on. 
Tns error struct: 
ns main err code: 12535 
TNS-12535: TNS: operation timed out 
ns secondary err code: 12606 
nt main err code: 0 
nt secondary err code: 0 
nt OS err code: 0 
Client address: (ADDRESS = (PROTOCOL = tcp) (HOST = 192.168.1.123) (PORT = 58147)) 

 

這個錯誤和一個network連接和錯誤有關係,Metalink 給出瞭如下的解決方案:

1. 在listener.ora裏設置如下內容 : INBOUND_CONNECT_TIMEOUT_ <listenername> = 0

2. 在sqlnet.ora裏或者服務器端 設置如下內容: SQLNET.INBOUND_CONNECT_TIMEOUT = 0 

3. 關閉並重新啓動listener 和 database(listener服務和數據庫(初學的朋友如果不太會命令可以在cmd裏輸入:services.msc打開windows服務,並重新啓動所有以oracle開頭的服務就ok了)。

4. 現在設置好上邊的內容之後,重新嘗試連接DB並且遵守行爲(遵守行爲是在不知道怎麼翻譯,大家忍耐一下原文是:

Now try to connect to DB and observe the behaviour)

 

這樣做之後在服務器端和Listener是比較遲鈍的。因此我們或許需要reload一下它。

具體操作如下:

[Oracle @ order admin] $ lsnrctl 

LSNRCTL for Linux: Version 10.2.0.2.0 - Production on 19-JUL-2006 15:26:33 

Copyright (c) 1991, 2005, Oracle. All rights reserved. 

Welcome to LSNRCTL, type "help" for information. 

LSNRCTL> reload 
Connecting to (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = 172.16.9.11) (PORT = 1521))) 
The command completed successfully 
LSNRCTL> services 
Connecting to (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = 172.16.9.11) (PORT = 1521))) 
Services Summary ... 
Service "order" has 2 instance (s). 
Instance "order", status UNKNOWN, has 1 handler (s) for this service ... 
Handler (s): 
"DEDICATED" established: 0 refused: 0 
LOCAL SERVER 
Instance "order", status READY, has 1 handler (s) for this service ... 
Handler (s): 
"DEDICATED" established: 0 refused: 0 state: ready 
LOCAL SERVER 
The command completed successfully 

LSNRCTL> show inbound_connect_timeout 
Connecting to (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = 172.16.9.11) (PORT = 1521))) 
LISTENER parameter "inbound_connect_timeout" set to 0 
The command completed successfully 
LSNRCTL> exit 

 

在windows下通俗點說就是:

1. 在cmd中輸入: lsnrctl 

2. 打開Listener控制檯,然後輸入reload命令,重載

3. 輸入:services命令

4. 輸入show inbound_connect_timeout查看設置是否成功

5. 最後輸入:exit命令推出控制檯

這樣以後嘗試連接一下數據庫,或許就可以了,我嘗試的結果是,第一次行ok,然後好像又不行了,就又設置了一下應該問題不大,總而言之,這個問題算是解決了,現在數據庫正常連接了。

本文主要參考連接:

http://www.kods.net/oracle10gr2-ora-3136-error-solution/

對於這個問題在JavaEye上有一位叫做"jinchunjian"的Java Friend 也給了一個解決方案,講的很不錯,大家可以分享一下:

http://yinchunjian.iteye.com/blog/697153

 

 

 

附帶一點內容:

執行一下內容可以重啓監聽器和EM:

lsnrctl stop

lsnrctl start

emctl stop dbconsole

emctl start dbconsole

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章