我用oracle jdbc打开几个oracle连接。我需要测试db的密码过期并且连接不起作用的某种情况。但是,当我手动使db密码失效时,连接仍然保持打开状态并正常工作。当我使db密码失效时,我应该怎样做才能关闭连接或关闭?
答案 0 :(得分:2)
如果在已建立的连接(会话)的中间中发生用户密码过期,它将不会结束用户会话 - 会话将不会自动关闭。用户将能够在到期后首次尝试登录时继续并提示(SQL * PLUS或其他工具)更改其密码。那是正确的行为。让用户完成他/她已经开始的事情。如果您能够在到期后立即关闭连接以终止用户会话,那么您可能不会干净并且用户的工作会丢失。
修改强>
如果用户没有再次登录,连接什么时候会关闭?是否有关于连接或类似事件的保持活动时间?
首先让我们定义会话和连接。会话是一个逻辑实体,连接是物理实体。一个连接可以在其上建立0到n个会话(您可以使用sql * plus CLI和来自v$process
视图的信息来测试它)。因此,密码过期比连接更倾向于用户会话,当用户注销时,其会话不再存在,但是当客户端应用程序关闭时,仍然可以建立和关闭连接。
会话会一直保持打开状态直到用户退出吗?
是的,这是可能的。如果您完全确定用户或应用程序已完成工作并且忘记关闭会话,则可以使用alter system kill session <<SID>>, <<Serial_Number>>
来终止(您必须被授予alter system privilege
)会话(s )。
有时间限制吗?
您可以创建profile并指定IDLE_TIME
选项。
create profile <<Profile_name>> limit idle_time <<num_of_minutes>>
并将其分配给用户。当会话不活动时间 - 会话未进行任何SQL调用的时间超过<<num_of_minutes>>
时,Oracle将回滚当前事务并结束该会话。
您还可以通过在SQLNET.EXPIRE_TIME
文件中设置sqlnet.ora
parameter,在几分钟内配置终止不再使用的连接。