oracle:TNS:监听程序无法分发客户机连接

挂上vpn的时候,PL/SQL连接到oracle的时候,显示ORA-12518:监听程序无法分发客户机连接。如下图:

 

一、【问题描述】

   最近,在系统高峰期的时候,会提示如上的错误,致使无法连接到服务器上的数据库。

二、【分析过程】

   1、首先判断是否由于监听配置不正确的原因导致?

      系统在正常情况下都可以正常的使用,检查监听配置,完全正确,监听配置不正确的可能性排除.

   2、是否因为数据库服务器处于共享服务器模式,是否会因为DISPATCHERS的数量太少,导致在高峰期的时候无法及时的分配客户机连接呢?

       把ORACLE的DISPATCHER数量增加到3个,发现在系统高峰的时候还是会出现如此的问题,可确定不是DISPATCHER的问题。

   3、判断是否PROCESS、SESSION数量设置的不够,导致ORACLE在高峰期的时候,没有足够的PROCESS对连接上来的客户服务进行分配?

      增大PROCESS、SESSION的设置,这种情况基本能够得到解决,出现的频率已经很少,但在一定的情况下,还是会出现以上的提示。

  4、在网上查找资料后发现,64位的WIN2012 R2系统ORACLE单进程的限制为4G,对于超过的内存,ORACLE也无法使用,导致ORACLE在高峰期对客户机分配到一定数量的时候,导致ORACLE可用的内存不足,导致以上提示..此时,只有通过降低SGA的大小,以使得ORACLE有更多的内存可以对客户端进行分配.

三、【解决途径】

1、首先修改ORACLE的PROCESS、SESSION数量

         查看当前ORALCE PROCESS数量

         SQL> show parameter process



        查看当前ORALCE SESSION数量

        SQL> show parameter session


        修改PROCESS数量:

        SQL>  alter system set processes=1000 scope = spfile;



        修改SESSION数量:

        SQL> alter system set sessions=1105 scope = spfile;



        注:sessions是个派生值,由processes的值决定,公式sessions=1.1*process + 5

  2、降低系统的SGA大小

        查看SGA的大小:

        SQL> show parameter sga



       同时修改sga_max_size和sga_target

       SQL>  alter system set sga_max_size=1000M scope = spfile;

       SQL>  alter system set sga_target=1000M scope = spfile;

 



重启ORACLE服务,问题基本解决。

猜你喜欢

转载自www.cnblogs.com/jianshuai520/p/10135095.html