日期:2014-05-17  浏览次数:20743 次

oracle 10g 安装在 windows 2003 32位操作系统上,连接数达到350个就不能再连接的问题,报ora 12518错.
问题是这样的:
 数据库应用环境是:windows server 2003+ oracle 10g(10.2.0.2)
 服务器IBM XSERVER,内存:4G
 oracle 数据库配置的主要参数如下:
 processes integer 800
 sessions integer 885
 pga_aggregate_target big integer 350M
 sga_max_size big integer 1256M
 sga_target big integer 1152M
 shared_pool_size big integer 400M
 large_pool_size big integer 16M
 
 数据库配置的连接数是800个,但是现在当oracle的连接数达到250个时候,其他的客户端就无法再连接上oracle服务器了,报个错:ORA-12518: TNS: 监听程序无法分发客户机 ;
 但是已经连接上数据库的应用还可以正常应用,就是其他没连上的就再也连不上了,除非已有的连接有退出的,其他的才能再联上,就是可连接的总数是250个;
 上网查:说是在可以在listener.ora中加入一行: direct_handoff_ttc_<listener name>=off,但是依旧不成; 
 这期间我们尝试着把
 pga_aggregate_target 改成200或者500等,结果是一样的;
 sga_target改成800m后,结果数据库就起不来了,提示说要不能小于1024m;
 
 后来查到有可能是oracle 10g for win32的一个bug,上网下了补丁,打完补丁后的版本是:10.2.0.3);还怀疑是不是windows 2003的tcp连接数不够,上网查说好像是有这毛病,下了个2003的补丁,把tcp连接数扩到了1000,结果能够达到可以有350个并发连接,但是再多就又连不上了;
 现在就是不太清楚究竟是什么参数配置的不合适,(不管是oracle10g的,还是windows 2003的),才会造成实际上没有达到oracle设置的最大连接数时就不能连接了;
 
 又后来,我们怀疑是不是windows 2003 32位的问题,于是就装了个64位的windows 2003,同样版本的oracle 10g,装好后就把连接数process参数配置成800,然后做连接测试,一直可以有800个session连接上来,到现在为止,可以大致总结出症结所在了,就是我们装的这个windows 2003 server(31位)的操作系统,在安装oracle 10g(10.2.0.1-10.2.0.3)时 有问题,连接数不能达到系统配置的那么大;可以采用64位的替代。但是我在想,究竟为什么windows 2003 server(31位)的操作系统+oracle 10g数据库连接数会有限制,有没有什么办法,修改一下2003的配置或者oracle 10g的配置, 就可解决掉这个问题, 不知大家有没有碰到过类似的问题,还请指教一二.

------解决方案--------------------
你把SGA的总数设小一点 sga_max_size 800M
可以支持更多的连接。
注意是把SGA设置小,可以支持更多的连接不清 =_=不过性能会不好