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