免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7595 | 回复: 12

关于oracle session非法中断,无法释放的问题 [复制链接]

论坛徽章:
0
发表于 2008-05-21 17:52 |显示全部楼层
环境racle 9.2.0.6
OS:hp-ux 11.23

客户端是一个不知道什么的应用程序,利用Oracle Client直接连接到数据库服务器, 每个客户端都直接连接数据库服务器, 没有中间件;

今天做了个测试, 在客户端启动一个程序,正常登录后, 把客户端电脑的网线拔掉, 客户端程序非法退出, 而服务器端查询v$session表, 发现有一个来自该客户端的进程不会被释放:
select username,status,osuser,program,terminal from v$session where terminal like '%IBM%';

重新将客户端电脑网络接通, 再次启动客户端应用程序, 再查看服务器v$session表, 发现2条来自该客户机的连接.

以上是现象, 这样可以判断出, 如果客户端应用程序非法中断, 则服务器上的session不会被释放, 在网上查询, 有网友说Oracle会隔段时间自动清理这些session, 不过至发贴为止有30分钟有余, 服务器仍然没有释放这些垃圾session.

请教, 该怎么来释放这些垃圾session, 或者说在服务器上的session在多长时间内没有活动就直接释放?

论坛徽章:
1
丑牛
日期:2014-08-07 17:07:05
发表于 2008-05-21 18:50 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2008-05-21 19:45 |显示全部楼层
手动杀掉不太现实.
如果仅仅是因为我手动操作造成这样的问题还好, 可是我有将近500个这样的真实客户端, 而出现客户端程序非法中断的不在少数, 所以我需要数据库能自动的清除, 在尽可能短的时间里.

还有, 在出现这样的问题之后的约2个小时的时间, 数据库自动清除了这个垃圾session.

论坛徽章:
1
丑牛
日期:2014-08-07 17:07:05
发表于 2008-05-21 20:23 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2008-05-22 13:30 |显示全部楼层
如果alter system kill 还杀不掉的话,只能通过v$session 和v$process 找到spid(os进程)
然后在操作系统上kill -9

论坛徽章:
0
发表于 2008-05-22 15:09 |显示全部楼层
现在有这么一个问题, 假如万一出现核心交换机中断, 会造成约300个用户的垃圾session, 这时候, 如果网络交换机恢复后, 客户端重新连接, 会出现服务session短时间内爆增的情况, 根据观察,每个连接的session会占用2M到20M不等的内存, 如此的话, 则服务器会在短时间内被撑爆的.

所以我希望能设置数据库, 让其在几分钟内(如5分钟)自动清理这些垃圾session.
故而手动kill并不现实, 不过也很感谢各位的回复.

论坛徽章:
0
发表于 2008-05-22 17:39 |显示全部楼层
原帖由 busyfan 于 2008-5-22 15:09 发表
根据观察,每个连接的session会占用2M到20M不等的内存, 如此的话, 则服务器会在短时间内被撑爆的.

呵呵,我这里也有这样的问题,顶一下。还想再问一下,你是如何观察一个Session使用了多少内存(data buffer,shared_pool ,large pool , pga 区) 多谢!!

[ 本帖最后由 peso 于 2008-5-22 17:41 编辑 ]

论坛徽章:
0
发表于 2008-05-22 20:56 |显示全部楼层
是啊,我也有这个问题的困扰,难道oracle 不能自己清理掉无效的session,我记得windows下是可以的,难道linux下就不能?
期待朋友门指点

论坛徽章:
0
发表于 2008-05-27 10:46 |显示全部楼层
再者, Oracle难道无法判断哪些连接已经被客户端非法中断, 哪些连接是正常连接吗?

论坛徽章:
0
发表于 2008-05-27 12:43 |显示全部楼层

idle_time的问题

对用户ABC做了idle_time的限制, 限制其值为5分钟. 发现以下问题:
1. 客户端连接到服务器, 然后空闲时间超过了idle_time的限制, 但是如果客户端一直空闲不做任何动作, 则该session会一直保留在服务器端不被中断, 直到客户端再次做查询或其它动作时, 如下例:
select username,program from v$session where username='ABC'
*
第 1 行出现错误:
ORA-02396: exceeded maximum idle time, please connect again
此时, 服务器才会中断该超时session

2. 客户端连接到服务器, 持续空闲时间超过idle_time的限制后, 在客户端继续保持空闲的情况下, 中断客户端的网络, 则该session又会变成垃圾session, 不再受客户端的影响, 不再受idle_time限制的影响.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP