今天服務部同事問我一個問題,客戶處的報表一半能打開,一半報錯如下:

Io 異常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=185599744)(ERR=12519)(ERROR_STACK=(ERROR=(CODE=12519)(EMFI=4))))
說實話之前也沒遇到過,隱隱感覺是數據庫訪問過多的問題,報錯信息里也只看得懂ERR=12519,按照這個思路查下去,發現是數據庫連接池訪問過多的原因。
解決方法如下
--首先檢查process和session的使用情況,在sqlplus里面查看。 SQL> show parameter processes NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ aq_tm_processes integer 0 db_writer_processes integer 6 gcs_server_processes integer 0 job_queue_processes integer 0 log_archive_max_processes integer 2 processes integer 200 SQL> select count(*) from v$process; COUNT(*) ---------- 195 --明顯process已經幾乎達到了頂峰。 SQL> show parameter session NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ java_max_sessionspace_size integer 0 java_soft_sessionspace_limit integer 0 license_max_sessions integer 0 license_sessions_warning integer 0 logmnr_max_persistent_sessions integer 1 session_cached_cursors integer 20 session_max_open_files integer 10 sessions integer 250 shared_server_sessions integer SQL> SQL> select count(*) from v$session; COUNT(*) ---------- 243 --同樣幾乎達到頂峰。 --修改oracle的process和session值,加大他們最大連接數。 --oracle文檔要求,SESSIONS和TRANSACTIONS的初始化參數應該源於PROCESSES參數,根據默認設置SESSIONS = PROCESSES * 1.1 + 5 SQL> alter system set processes=500 scope=spfile; System altered. SQL> alter system set sessions=555 scope=spfile; System altered. --重啟數據庫后參數修改完成 SQL> shutdown --如果長時間沒反應可能是連接請求沒又關閉,也可以使用 abort參數直接關閉 SQL> startup --可以用 force參數 關閉當前運行數據庫后正常啟動。
