美好时光。
前几天,我们的数据库团队检测到会话中有一个' ACTIVE'不再处于活动状态的客户端的状态。调查显示,此类问题有两个主要来源:
对我而言,所有会议都在“活动”中是很奇怪的。状态。有人可以澄清一下这可能是什么(也许有一些基础进程在相应的套接字上等待或者......就一切正常的tomcat关闭一切正常,似乎根本原因是事务。 ..)?
如果我们设置了IDLE_TIME'它会有所帮助吗? (适用于所有连接)和' EXPIRE_TIME' (对于我们所有的RAC实例)?
我是否应该采取以下方案(设置上述参数):
更新:
似乎处理这种情况的唯一方法是配置Oracle实例。 有调查结果:
https://community.oracle.com/thread/873226?start=0&tstart=0
对于死连接检测,使用服务器端sqlnet.ora文件 参数SQLNET.EXPIRE_TIME =<#of minutes>
另一个选项是在配置文件设置中实现idle_time。然后用一些工作杀死SNIPED会话(当idle_time将是 达到,会议将从INACTIVE到SNIPED)。
如果我打开一个连接然后去吃午餐,那么IDLE_TIME限制就会出现 导致我的会话在15分钟不活动后终止。一个 EXPIRE_TIME为15分钟,只会让Oracle向我发送数据包 客户端应用程序,以验证客户端是否已失败。如果 客户端已启动,它将回答ping,我的会话将保持不变 无限期。 EXPIRE_TIME只会导致会话被杀死 客户端应用程序无法响应ping,暗示着 客户端进程失败或客户端系统失败。 IDLE_TIME会杀死一段时间内没有活动的会话 时间,但这通常不适用于那些应用程序 维护一个连接池,因为假设有那个 连接池将有相当数量的空闲连接 对于一天中的某些时段以及自使用连接的应用程序 游泳池往往对游泳池中的连接造成不良反应。
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2233109200346833212
默认情况下,TCP / IP不会因设计而中断。当一个 连接消失,客户端和/或服务器不会立即获得 收到通知。因此,如果您的客户端连接到数据库并且什么也不做 你拔掉你的客户端(蓝屏,杀死它,拔出网线,崩溃计算机,等等)可能性很大 将留在数据库中。服务器不会知道它永远不会 收到你的消息。如果,我们有死客户端检测 这成了一个问题:
http://download.oracle.com/docs/cd/B12037_01/network.101/b10776/sqlnet.htm#sthref476
至于活跃的会话,这真的很容易。你打开一个连接, 您通过此连接提交请求,例如"锁定表T"。表t 在您的会话中被您的交易锁定。然后你提交一个块 代码如:
开始循环dbms_lock.sleep(5);结束循环;结束; /
只要该代码正在运行,您的会话就会处于活动状态 - 客户端进程在等待服务器的套接字读取时被阻止 发回一个结果 - 一个回复(当然永远不会到来)。该 服务器现在还没有触及网络 - 它处于活动状态 你的代码。所以,如果你的客户“死了”。现在 - 代码块 将继续运行,运行和运行 - 因为它从未提交 - 它只是挂在那里然后跑,当然还有任何你想要的锁 留在原地。
http://www.dba-oracle.com/t_connect_time_idle_expire_timeout.htm
sqlnet.expire_time参数用于设置时间间隔 分钟,以确定应该发送探测的频率来验证 客户端/服务器连接处于活动状如果你需要确保 连接不会无限期地保持打开(或者直到设定的时间) 操作系统特定的参数),你应该设置一个值 大于0.这可以保护系统免受打开的连接 由于客户端异常终止。
https://asktom.oracle.com/pls/apex/f?p=100:11:0::NO::P11_QUESTION_ID:453256655431
如果会话正在等待资源锁定或锁存,如果是这样 等待时间超过了配置文件中的idle_time设置,会话 即使会话正处于交易中,也会被狙击 等待锁定等。
如果是,警报日志中是否会有任何条目。
跟进
如果等待锁定,则表示您处于活动状态 - 而不是闲置。
在我获得Oracle支持之前六个月,这些页面引起了我的注意 对于Data Guard问题,所以Oracle的一个人注意到我使用了 Idle_Time,他告诉我这个参数不能很好地工作 因为Oracle不会释放标记的会话资源 剪断,直到下次用户尝试使用它(等待 告诉你的会话被杀,要清除会话资源)
跟进
......经过调查......"会议"那是那个 在客户承认之前不会消失,但是 "交易"走了。
Tom,我已经改变了一个配置文件,让IDLE_TIME = 240(4小时)并制作完成 确保我的resource_limit参数设置为TRUE。当我查询 v $ session我看到了一些" snipped"会议,但也"不活跃"那个 已经闲置了一天多。所有这些用户都有此个人资料 分配给他们。如果用户会话在idle_time之前连接 已经确定,这些会议是否会受到这种变化的影响?我'已经 很久以前就做了一个改变。还有什么我应该做的 做过吗?
跟进
如果在设置idle_time之前连接了用户会话, 他们已经过了#34;在 - 他们不会被狙击。它只是 影响新会议。
http://agstamy.blogspot.ru/2011/03/profile-and-resource-limit.html
答案 0 :(得分:0)
我们检查了上述调查中列出的参数,一切正常!