如果抛出了ora-02391,我们可以通过alter user xxxxx profile xxxx sessions_per_user xxxx来进行解决。
问题是这种错误在数据库日志中不会显示,所以DBA也无从知晓,只能等待反馈,得到反馈后再解决问题。
我们可以变被动为主动。
使用下面的监控语句来进行检查。
比如我们设置阀值为90%,即每个user的对应的session超过profile中设定值的90%,就会返回结果。
select u.username||' with related profile '||p.profile||' has potential issue on '||p.resource_name ||' current value is '||s.cnt||' of '||p.limit
from dba_profiles p,
(select username,count(*)cnt from v$session where username is not null group by username) s,
dba_users u
where p.RESOURCE_NAME = 'SESSIONS_PER_USER'
and p.profile=u.profile
and s.username=u.username
and p.profile !='DEFAULT'
and s.cnt*100/decode(p.limit,'DEFAULT',999)>=90;
返回结果类似下面的形式。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
APP_TEST with related profile PF_APP_TEST1 has potential issue on SESSIONS_PER_USER current value is 29 of 31
APP_TEST2 with related profile PF_APP_TEST2 has potential issue on SESSIONS_PER_USER current value is 60 of 6
进一步改进,我们可以加入orabbix中,这样我们可能比开发还早收到报警邮件,问题处理也更有效。