打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
解决Oracle 11gR2 空闲连接过多,导致连接数满的问题

转自:http://blog.itpub.net/28998293/viewspace-1153969/ (有修改)
今天又遇到了11gR2连接数满的问题,以前也遇到过,因为应用那边没有深入检查,没有找到具体原因,暂且认为是这个版本Oracle的BUG吧。
上次的处理办法是用Shell脚本定时在系统中kill  v$session.status='INACTIVE'的连接,但是这次现场没有在操作系统中部署脚本的权限,只好在数据库中做处理,幸好我们对这个数据库有完全的权限。这次使用了profile+JOB定时alter system kill 'sid,seral#' immediate的方式。具体脚本如下:

  1. grant select on v_$session to TEST_USER;    --(解决v$session表或视图不存在)
  2. 给用户TEST_USER系统权限alter system;

  3. CREATE PROFILE KILLIDLE LIMIT IDLE_TIME 30;
  4. SELECT * FROM dba_profiles WHERE PROFILE='KILLIDLE';
  5. ALTER USER TEST_USER PROFILE KILLIDLE;
  6. SELECT username,PROFILE FROM dba_users WHERE username='TEST_USER';
  7. ALTER SYSTEM SET resource_limit=TRUE;

  8. CREATE OR REPLACE PROCEDURE sp_kill_idlesession
  9. /**********************************
  10. 清除idle超时的会话进程
  11. **********************************/
  12. AS
  13. CURSOR c_kill_sqls
  14. IS SELECT 'alter system kill session '''||s.sid||','||s.SERIAL#||''' immediate' sqlstr FROM v$session s WHERE s.STATUS='SNIPED';
  15. BEGIN
  16. FOR v_sql IN c_kill_sqls
  17.   LOOP
  18.     EXECUTE IMMEDIATE v_sql.sqlstr;
  19.   END LOOP;
  20. END;

  21. --添加JOB,定时清理过期会话
  22. DECLARE jobnum NUMBER :=661;
  23. BEGIN
  24.   dbms_job.submit(job => jobnum,
  25.                   what => 'sp_kill_idlesession;',
  26.                   next_date => to_date('30-04-2014 18:00:00', 'dd-mm-yyyy hh24:mi:ss'),
  27.                   interval => 'SYSDATE + 1/144');
  28.   commit;
  29. END;

  30. --如果30分钟过期时间太短,对数据库访问性能产生了影响,可以调整
  31. ALTER PROFILE KILLIDLE LIMIT IDLE_TIME 30;  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用IDLE
Oracle 被锁记录的解锁法
Oracle查看锁表与解锁方法
ORACLE 如何查询被锁定表及如何解锁释放session
Oracle锁表与解锁的方案
oracle连接超时自动断开问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服