ORA-12537错误的解决

来源:互联网 发布:java报表是什么 编辑:程序博客网 时间:2024/05/17 02:29

ORA-12537错误的解决

Author : rainnyzhong

Date: 2009-6-5

服务器配置:

DB VERSIONOracle 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 RAM8G

症状描述:

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         PROCESSES300

n         SESSIONS350

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服务器的物理内存。

原创粉丝点击