ORA-00020:maximum number of processes (150) exceeded 错误解决方法

这个问题存在好几天了,一直没有根本上的解决办法,昨天终于解决了,下面就说一下我的解决过程,希望对大家有所帮助:

第一次:一开始只是通过admin/数据库名/pfile/init.ora.018201210520下的process = 150 然后修改成了500,重启数据库,本认为万事大吉了,大约过了几个小时客户来电话,说不行了,再次连接不上数据库了。

第二次:然后又继续想问题的所在,对于数据库的进程数超过最大值,只有资源打开之后,没有及时的关闭,或者说资源打开之后不正常的关闭界面造成数据库中的process处于inactive,没有释放,后来就想应该是程序的问题了,找多了,所有的数据库连接的类,进行statement和result的关闭,心想这下应该没问题了,更新之后,重启服务,没想到的是,大晚上的两点客户再次来了电话,不行了。

第三次:然后SQL> show parameter processes;
NAME TYPE VALUE
------------------------------------ ----------- ---------------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
job_queue_processes integer 10
log_archive_max_processes integer 1
processes integer 150

一看怎么已经改了,依然是150,后来通过网上看到,单纯的改配置文件无效,而后就通过以下sql进行了修改

SQL> alter system set processes=500 scope = spfile;

done;

SQL> create pfile from spfile;

done;

这里执行时间有可能会提示权限不足,这个时间用dba权限即可

然后重启数据库,再次show,已经修改成了500,暂时告一段落,客户来电话的频率低了。不过还是要说一下问题的根本所在,请继续往下看

第四次:然后通过sql:select sid,serial#,username,program,machine,status from v$session;查询当前数据的连接状态,出现了如下图(部分截图)原来和上面想的是一样的,有如此多的inactive,可是程序中已经进行了关闭了,查看了造成inactive的计算机名字,都不是服务器的问题,而是客户端连接的一台造成的,然后通过dos命令net view 查看整个局域网所有的计算机名字,找到了计算机名字,然后用ping 计算机名,找到了问题计算机的ip,然后去一看是oa系统的一台服务器,就想问什么和这里有关系,而且这里的连接数不断的增大,回想了一下,原来是自动生成报表的时间用到了问题数据库的连接,去掉oa中相关的报表之后,过了两个小时,所有的连接都已经去掉,万事大吉,客户再也没来相同问题的电话了,终于睡个好觉了。



你可能感兴趣的:(java异常)