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

今天又遇到了11gR2连接数满的问题,以前也遇到过,因为应用那边没有深入检查,没有找到具体原因,暂且认为是这个版本Oracle的BUG吧。

上次的处理办法是用Shell脚本定时在系统中kill  v$session.status=‘INACTIVE‘的连接,但是这次现场没有在操作系统中部署脚本的权限,只好在数据库中做处理,幸好我们对这个 数据库有完全的权限。这次使用了profile+JOB定时alter system kill ‘sid,seral#‘ immediate的方式。具体脚本如下:

    1. CREATE PROFILE KILLIDLE LIMIT IDLE_TIME 30;
    2. SELECT * FROM dba_profiles WHERE PROFILE=‘KILLIDLE‘;
    3. ALTER USER TEST_USER PROFILE KILLIDLE;
    4. SELECT username,PROFILE FROM dba_users WHERE username=‘TEST_USER‘;
    5. ALTER SYSTEM SET resource_limit=TRUE;
    6. CREATE OR REPLACE PROCEDURE sp_kill_idlesession
    7. /**********************************
    8. 清除idle超时的会话进程
    9. **********************************/
    10. AS
    11. CURSOR c_kill_sqls
    12. IS SELECT ‘alter system kill session ‘‘‘||s.sid||‘,‘||s.SERIAL#||‘‘‘ immediate‘ sqlstr FROM v$session s WHERE s.STATUS=‘SNIPED‘;
    13. BEGIN
    14. FOR v_sql IN c_kill_sqls
    15. LOOP
    16. EXECUTE IMMEDIATE v_sql.sqlstr;
    17. END LOOP;
    18. END;
    19. --添加JOB,定时清理过期会话
    20. DECLARE jobnum NUMBER :=661;
    21. BEGIN
    22. dbms_job.submit(job => jobnum,
    23. what => ‘sp_kill_idlesession;‘,
    24. next_date => to_date(‘30-04-2014 18:00:00‘, ‘dd-mm-yyyy hh24:mi:ss‘),
    25. interval => ‘SYSDATE + 1/144‘);
    26. commit;
    27. END;
    28. --如果30分钟过期时间太短,对数据库访问性能产生了影响,可以调整
    29. ALTER PROFILE KILLIDLE LIMIT IDLE_TIME 30;
时间: 2024-08-28 02:57:33

解决Oracle 11gR2 空闲连接过多,导致连接数满的问题的相关文章

TIME_WAIT状态的连接过多导致系统端口资源耗尽问题(2)

继上次解决完mysql连接过多,导致的TIME_WAIT进程过多问题之后,最近这个现象再一次出现,并且依然和之前一样严重.只不过这次出现问题的mysql 服务跟上次不一样,上一次主要是mysql master server,而这一次是mysql slave server.所以这意味着,我们上次解决了部分问题,但没有彻底解决,还存在一部分问题.所以这次彻底的把这个问题好好梳理一下. 再次确认一下TIME_WAIT进程的所属服务: sudo netstat -anp | grep TIME_WAIT

Oracle 11gR2 RAC连接时ORA-12545错误

刚装成的Oracle 11gR2的RAC集群 三个节点 创建好数据库,一切都在正常的进行中 然后去安装了一个oracle client,进行链接时出现了ORA-12545 然后简单的baidu了一下,有人说是11gR1的bug,改一下实例的监听配置 然后还有人说是11gR1的bug需要alter system register;(注册监听) 我这儿看,我的实例和监听没错. 下边记录整个错误的分析过程 首先查看~/.bash_profile export ORACLE_SID=+ASM1#expo

解决Linux服务器 FIN_WAIT2 连接过多的问题

在HTTP应用中,存在一个问题,SERVER由于某种原因关闭连接,如KEEPALIVE的超时,这样,作为主动关闭的SERVER一方就会进入 FIN_WAIT2状态,但TCP/IP协议栈有个问题,FIN_WAIT2状态是没有超时的(不象TIME_WAIT状态),所以如果CLIENT不关闭,这个FIN_WAIT_2状态将保持到系统重新启动,越来越多的FIN_WAIT_2状态会致使内核crash. 解决办法:修改/etc/sysctl.conf 文件: net.ipv4.tcp_syncookies

解决 mac ssh空闲 连接断开问题

想必大家都知道,用终端 ssh 连接服务器,如果长时间没有操作,会被断开连接. 要用的话又得重新登录,这非常不方便,也影响开发效率.那针对这种情况,有没有解决方法呢? 答案是肯定的.理论上,有两种方案 : 1.修改服务器sshd_config文件 2.修改使用者CRT的链接每隔多长时间发送一个字符串 修改服务器不太可能,站在管理者的角度思考问题,保持长时间连接,耗资源,谁也不同意让开发这样做. 那就从我们的客户端改起. Mac 有两种解决方法 1.下载SecureCRT,这个终端软件可以设置每隔

RDS MySQL 连接数满情况的处理

RDS MySQL 连接数满情况的处理 RDS MySQL 连接数满有2种情况 1. 空闲连接过多 原因: 应用使用长连接模式 - 对于长连接模式(比如Java应用),应用侧应该配置连接池.连接池的初始连接数设置过高,应用启动后建立多个到RDS实例空闲连接.如果出现连接数满(too many connections)不能连接的问题,请检查连接池是否启用了复用连接功能. 应用使用短连接模式 - 对于短连接模式(比如PHP应用),出现大量的空闲连接说明应用没有在查询执行完毕后显式的关闭连接.用户应该

解决PL/SQL Dev连接Oracle弹出空白提示框

第一次安装Oracle,装在虚拟机中,用PL/SQL Dev连接远程数据库的时候老是弹出空白提示框,网上找了很久,解决方法也很多,可是就是没法解决我这种情况的. 没办法,只能自己研究,经过大概一天时间吧,还是搞好了,写个总结. 出现这种问题,解决方法大概有这几种: 1.权限不够,导致弹出空吧提示框.(直接上链接) http://jingyan.baidu.com/article/066074d6760959c3c21cb0d6.html 就PL/SQL图标上点右键---属性---兼容性--管理员

TIME_WAIT连接过多解决办法

问题起因: 自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放.看了一下18888,当时吓到了. 现象: 1.外部机器不能正常连接SSH 2.内向外不能够正常的ping通过,域名也不能正常解析. 问题排查: 通过 netstat  -anp | grep TIME_WAIT | wc -l 命令查看数量,发现TIME_WAIT的连接数量超过了18000太夸张了. 1.初步怀疑是程序没有关闭连接,codereview了两遍,发现,

MySQL的TIME_WAIT连接过多的解决方法

今天上MySQL服务器看了下并发,发现了以下情况 MySQL的TIME_WAIT连接过多,吓了我一跳,因为这个服务器我很少去管理,今天突然想上来看看,发现了这个问题.以下是我的解决方法 [[email protected] data]# ss -an | grep 3306 | wc -l 1402[[email protected] data]#mysql -uroot -p mysql> show variables like "time_timeout"; | wait_t

ORA-12541:TNS:无监听程序 配置Oracle Myeclipse无法连接上 花费一天时间解决掉的

背景:自己机子做oracle服务器,其他机子可以ping得通我的机子,但是jdbc就是连不上,后来用plsql连出现无监听程序.... 我昨天重新安装Oracle后,用PL/SQL Developer连接oracle时出现ORA-12541:TNS:无监听程序的错误,如下图: 在王鹏师兄的帮助下,发现原来是oracle的监听没有启动,重启监听后就连接成功了,下面跟大家分享一下如何启动oracle的监听. 1.打开Net Configuration Assistant 2.选择监听程序配置,下一步