概述
最近,服务器Oracle数据库出现问题,用不到半天,就会报连线上的问题,这种一般就是数据库的会话超过最大数了。由于服务器跑的是档案传输应用,占用的请求和会话肯定很大,因此使用者数不大就已经让oracle的会话数达到最大值。处理方式不外乎两种:扩大oracle最大session数以及清除inactive会话,当然还有,就是从数据库连线池和程式bug上面下手。这里我选择配置Oracle自动清除超过一定时间的应用程序无效连线,下面一起来看看吧!
1、检视数据库连线
select sid,serial#,username,status from v$session;2、删除无效连线
这个方式比较粗暴,是直接清理掉数据库通过监听去连线的所有会话...shenzhong!ps -ef|grep ora_*| grep LOCAL=NO|awk \'{print $2}\'|xargs kill -9
3、优化自动删除无效连线
通过profile可以对使用者会话进行一定的限制,比如IDLE时间。将IDLE超过一定时间的会话断开,可以减少数据库端的会话数量,减少资源耗用。建立profile档案,profileName的connect_time设定连线超过多少分钟后强制释放,idle_time设定连续不活动的会话超过多少分钟后强制释放
3.1、设定resource_limit为TRUE
sqlplus / as sysdba
alter system set resource_limit=true;
SELECT * FROM DBA_PROFILES;
3.2、建立一个允许30分钟IDLE时间的PROFILE
建立profile档案,connect_time设定连线超过多少分钟后强制释放,idle_time设定连续不活动的会话超过多少分钟后强制释放
create profile killidle limit connect_time 240 idle_time 30;
select * from dba_profiles where profile=\'KILLIDLE\';
3.3、修改使用者profile
select username,profile from dba_users where username=\'UAP65\';
alter user UAP65 profile killidle;
配置后应用程序就不会无端端的占用数据库过多连线了。
后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~