Oracle12537

ORA-12537错误的解决
Author : rainnyzhong
Date: 2009-6-5
服务器配置:

DB VERSION:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi 专用服务器
OS: Linux ecv33.localdomain 2.6.9-55.ELsmp #1 SMP Fri Apr 20 16:36:54 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux
OS RAM:8G
症状描述:

用SQLPLUS连接DB报:
ERROR:
ORA-12537: TNS:connection closed       

检查listener.log,看到很多如下错误:
05-JUN-2009 13:24:26 * (CONNECT_DATA=(SID=ORA33)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) * (ADDRESS=(PROTOCOL=tcp)(HOST=172.17.16.234)(PORT=1487)) * establish * ORA33 * 12518
TNS-12518: TNS:listener could not hand off client connection
TNS-12547: TNS:lost contact
  TNS-12560: TNS:protocol adapter error
   TNS-00517: Lost contact
    Linux Error: 32: Broken pipe

检查sqlnet.log,报很多类似如下的错误:
***********************************************************************
Fatal NI connect error 12537, connecting to:
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.17.16.33)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ora33)(CID=(PROGRAM=sqlplus)(HOST=ecv33.localdomain)(USER=oracle))))

  VERSION INFORMATION:
       TNS for Linux: Version 10.2.0.1.0 - Production
       TCP/IP NT Protocol Adapter for Linux: Version 10.2.0.1.0 - Production
  Time: 05-JUN-2009 13:24:52
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12537
    TNS-12537: TNS:connection closed
    ns secondary err code: 12560
    nt main err code: 507
    TNS-00507: Connection closed
    nt secondary err code: 0
nt OS err code: 0
原因分析:

(1)检查实例参数:
n         PROCESSES:300
n         SESSIONS:350
(2)检查v$resource_limit

当实际的进程数达到200个左右时,就连不到ORACLE了。报ORA-12537错。当发生这种错误时,一般是由于PROCESS参数设得不够大所导致,但这个CASE有点例外,当实际进程数达到200时就不行了,这是为什么呢?
这是因为,还有一个原因会导致这个错误的发生:那就是OS的内存使用状况。当OS的内存使用率达到90%以上时,既使是还可以再建立100个进程,但此时由于OS再也分配不出更多的内存来给ORACLE的服务进程了,所以监听器就没办法给进来和客户端连接启动一个专用的ORACLE SERVER PROCESS(我们知道,在DEDICATED SERVER模式,一个客户端连接的建立,ORACLE就会启动一个专用的SERVER PROCESS来服务这个客户端连接)。我们来检查一下OS的内存状况:
[oracle@ecv33 admin]$ free
             total       used       free     shared    buffers     cached
Mem:       8160800    8142776      18024          0      10236    6809660
-/+ buffers/cache:    1322880    6837920
Swap:      8388600     104252    8284348

果然,OS的内存使用率已达99%了。
解决方法:

增加ORACLE服务器的物理内存

你可能感兴趣的:(oracle)