在連接配接Oracel資料庫時,每隔一段時間就會出現:ORA-12518:監聽程式無法分發客戶機連接配接,如圖

上網查了資料原因和解決方案如下:
一、【問題描述】
最近,在系統高峰期的時候,會提示如上的錯誤,緻使無法連接配接到伺服器上的資料庫。
二、【分析過程】
1、首先判斷是否由于監聽配置不正确的原因導緻?
系統在正常情況下都可以正常的使用,檢查監聽配置,完全正确,監聽配置不正确的可能性排除.
2、是否因為資料庫伺服器處于共享伺服器模式,是否會因為DISPATCHERS的數量太少,導緻在高峰期的時候無法及時的配置設定客戶機連接配接呢?
把ORACLE的DISPATCHER數量增加到3個,發現在系統高峰的時候還是會出現如此的問題,可确定不是DISPATCHER的問題。
3、判斷是否PROCESS、SESSION數量設定的不夠,導緻ORACLE在高峰期的時候,沒有足夠的PROCESS對連接配接上來的客戶服務進行配置設定?
增大PROCESS、SESSION的設定,這種情況基本能夠得到解決,出現的頻率已經很少,但在一定的情況下,還是會出現以上的提示。
4、在網上查找資料後發現,32位的WIN2003系統ORACLE單程序的限制為1.7G,對于超過的記憶體,ORACLE也無法使用,導緻ORACLE在高峰期對客戶機配置設定到一定數量的時候,導緻ORACLE可用的記憶體不足,導緻以上提示..此時,隻有通過降低SGA的大小,以使得ORACLE有更多的記憶體可以對用戶端進行配置設定.
經檢查,現場的托管伺服器環境為:32位的WIN32以及32位的ORACLE..直接導緻ORACLE能夠使用的記憶體不超過1.7G,對SGA的大小進行一定量的減少,系統基本不再出現無法配置設定的問題。
三、【解決途徑】
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 session=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服務,問題基本解決。
四、【經驗總結】
雖然通過增加PROCESS、SESSION數量并且降低了SGA的大小,使得整個托管的伺服器的問題得到解決。但是,通過上面的問題分析可以知道,這隻是治标不治本的處理方式,問題的最終原因還是因為32的WIN 2003作業系統+32位的ORACLE導緻單程序最高記憶體不能超過1.7G導緻的。是以在以後縣區的資料加至現在的伺服器中,必将導緻這個問題的重制.
是以,最終的解決辦法是,将資料庫和伺服器的作業系統全部更新至64位,或者将伺服器使用UNIX的作業系統.
是以,在以後類似的托管伺服器或者其他資料庫伺服器搭建時,一定要注意這個問題,如果客戶提供的伺服器為32位的,那麼,一定要反應出這個問題.
轉自:http://blog.csdn.net/zouyujie1127/article/details/16883493