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

 

 

 

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