1. 程式人生 > >oracle:TNS:監聽程式無法分發客戶機連線

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服務,問題基本解決。