今天服务部同事问我一个问题,客户处的报表一半能打开,一半报错如下:
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参数 关闭当前运行数据库后正常启动。