1、错误提示:
ORA-00018: maximum number of sessions exceeded。
2、问题分析:
使用下面的sql去排查和验证:
(1)使用sys用户(DBA权限)连接数据库;
(2)查询当前使用的process、session数量。
select count(*) from v$process;
select count(*) from v$session;
(3)查询系统设置的process、session数量。
show parameters processes;
show parameters sessions;
对比当前使用的process、session数量与系统设置的数量,如果当前使用的数量等于或接近系统设置的数量,则当业务系统再次访问时,实际的processes、sessions值(包括新产生的)会超过Oracle的系统限制的数量,导致出现超出最大连接数的错误提示。
Oracel默认processes的值为150,导致实际的sessions值会超过Oracle的设置值,所以会出错。sessions与processes的数量关系:sessions=processes*1.1+5。
3、解决办法:
(1)增大processes、sssions数值。
alter system set processes=1000 scope=spfile;
alter system set sssions=1105 scope=spfile;
(2)重启数据库实例。
4、说明:
(1)事前最好定期做好数据备份,免得操作不当,造成数据丢失。
(2)processes、sessions超出系统限制的数量后,可能使用sys用户(DBA权限)无法连接数据库。可以在空闲时间把应用程序停掉一段时间譬如15分钟,看下是否释放一些session,再用sys用户连接。
(3)可以在空闲时间如晚上的业务不办理期间,只停掉oracle的监听服务,等待一段时间譬如15分钟,再次启动oracle的监听服务,看下是否释放一些session,再用sys用户连接。