Oracle密码延迟验证导致的系统HANG住.docx
Oracle数据库在11g版本引入了一项名为"密码延迟验证"的安全特性,这一特性在特定情况下可能导致系统响应缓慢,甚至hang住。这个问题通常出现在修改了应用程序账户密码之后,如果应用服务器未能及时更新数据库连接信息,每次尝试连接时,即便是使用正确的密码,也会经历较长的验证时间,从而引发应用程序连接超时。 当密码验证失败时,Oracle会累积验证时间,如果连续多次错误,这将显著增加后续正确密码验证所需的时间。对于依赖自动连接的应用程序,例如持续尝试连接的后台服务,这可能会导致严重的性能问题。在描述的问题中,可以看到数据库登录日志`dba_audit_session`被用来识别登录失败的主机和应用,以便通知架构负责人进行调整。 解决此类问题的方法有多种。如果计划修改应用账户密码,应当提前规划好哪些应用服务器需要更新连接信息,并准备好相应的脚本。如果应用服务器数量庞大,需要在修改后实施监控,比如通过查询`dba_audit_session`来追踪登录失败的记录。 在问题发生且处理不及时的情况下,可以使用Linux命令行工具(如`ps`、`grep`和`awk`)查找并终止所有非本地(远程)连接进程。然而,这种方法可能会影响一些正常运行的进程,因此在执行后,需要手动重启这些进程,如审计库的远程连接进程。 为了避免密码延迟验证特性的影响,可以使用事件设置`EVENT 28401`来临时或永久地禁用这一特性。通过执行以下SQL语句: ```sql alter system set event = "28401 TRACE NAME CONTEXT FOREVER, LEVEL 1" scope=spfile; ``` 这将在下次数据库重启时生效。若要取消设置,使用: ```sql alter system set event= '28401 trace name context off' scope=spfile; ``` 启用审计功能时,可以通过以下SQL查询来统计过去一周内登录失败的次数: ```sql select username, os_username, userhost, client_id, trunc(timestamp), count(*) failed_logins from dba_audit_trail where returncode = 1017 and timestamp > sysdate - 7 group by username, os_username, userhost, client_id, trunc(timestamp); ``` 理解Oracle的密码延迟验证机制以及如何应对由此引发的问题,对保障数据库系统的稳定性和性能至关重要。正确配置和管理这一特性,可以有效避免不必要的系统hang住和性能下降。
- 粉丝: 900
- 资源: 57
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0