天天看點

Oracle超出最大連接配接數問題及解決

用過oracle的應該都熟悉如何檢視和設定oracle資料庫的最大連接配接數。這裡就再啰嗦一遍。

檢視目前的連接配接數,可以用:select count(*) from v$process; 設定的最大連接配接數(預設值為150)select value from v$parameter where name = ‘processes’; 修改最大連接配接數alter system set processes = 300 scope = spfile;

都知道,當資料庫最大連接配接數不夠時會出現用戶端連接配接間歇性失敗,報錯ora-12519。設定大點一般就可以了。但是做大型項目的時候還是會遇到一些不正常的問題,比如:設定最大連接配接數800,但是正常連接配接200多個就會報錯,這也是我在一次面試中得知的。回來因為自己的垃圾機器上沒有裝oracle,就查了些資料,發現還真的有這個問題,不過不是什麼難題,貌似很多人遇到過,看來我們真的做項目太少了吧,頂多同時測試的也就十多個人。

網上搜集到有此類問題的描述,如下。

伺服器ibm xserver,記憶體:4g

oracle 資料庫配置的主要參數如下:

processes integer 500 sessions integer 585 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

看樣子挺不粗的配置,但是就這樣預設情況還是會出現連接配接數不夠的現象。資料庫配置的連接配接數是500個,但是現在當oracle的連接配接數達到120個時候,其他的用戶端就無法再連接配接上oracle伺服器了,報個錯:ora-12518: tns: 監聽程式無法分發客戶機;但是已經連接配接上資料庫的應用還可以正常應用,就是其他沒連上的就再也連不上了,除非已有的連接配接有退出的,其他的才能再聯上,就是可連接配接的總數是120個;

有網友說是在可以在listener.ora中加入一行: direct_handoff_ttc_ =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,結果能夠達到可以有250個并發連接配接,但是再多就又連不上了。

現在就是不太清楚究竟是什麼參數配置的不合适(不管是oracle10g的,還是windows 2003的),才會造成實際上沒有達到oracle設定的最大連接配接數時就不能連接配接了。

最後,懷疑是不是windows 2003(32位)的問題,于是就裝了個64位的windows 2003,同樣版本的oracle 10g,裝好後就把連接配接數process參數配置成800,然後做連接配接測試,一直可以有800個session連接配接上來,到現在為止,可以大緻總結出症結所在了,就是windows 2003 server(32位)的作業系統,在安裝oracle 10g(10.2.0.1-10.2.0.3)時有問題,連接配接數不能達到系統配置的那麼大,可以采用64位的替代。找到問題根源了,就可以想到究竟為什麼windows

2003 server(32位)的作業系統和oracle 10g資料庫連接配接數會有限制,修改一下2003的配置或者oracle 10g的配置, 就可解決掉這個問題。

解決方案:

a.修改oracle參數

1、原有參數 #pga_aggregate_target=67108864 #processes=500 #sessions=555 # pga_aggregate_target此參數是擴大并發連接配接數占用記憶體大小。 # 可調整此參數,放大或縮小,同時影響并發數量。 # 公式: 約=可按照并發數量*4m pga_aggregate_target=720m # processes、sessions是擴大并發連接配接數,是同時使用。 # 公式: sessions = processes *1.1 +5 processes=600 sessions=665 2、在監聽參數檔案listener.ora 檔案中增加參數 direct_handoff_ttc_listener = off 3、重新啟動資料庫服務。

b.修改windows配置

1、修改windows系統中boot.ini檔案 /3gb /pae 說明:修改作業系統中boot.ini檔案,可以使oracle使用更多的記憶體空間。 2、修改使用者組政策中鎖定記憶體頁大小權限。 參數修改完畢問題解決。 3、重新開機計算機