Oracle 12c Failed Logon Delay等待事件

Oracle 12c中Failed Logon Delay等待事件处理方法。

问题现状

在这里插入图片描述
数据库版本为Oracle 12.2.0.1.0。

在这里插入图片描述
在等待事件中,看到failed logon delay平均等待1000ms。

在这里插入图片描述
管理连接总耗时14491秒

问题分析

根据MOS文档:Failed Logon Delay Causing Performance Hit (Doc ID 2246758.1)所述,可能是由引入的自动过程引起的,该过程使用错误的密码尝试登录到数据库服务器。原因是延迟登录失败的安全功能。这由sec_max_failed_login_attempts和sec_protocol_error_further_Action控制。在 11g 中,sec_max_failed_login_attempts是 10,在 12c 中是 3。这意味着这种延迟可能会在 12c 中出现更多。sec_protocol_error_further_Action参数的默认值从 11g 中的 CONTINUE 更改为 12c 中的 (DROP, 3)。如果使用值 CONTINUE(以在升级后保留 11g 设置),则由于 sec_max_failed_login_attempts 的值减少,可能会看到此等待。

解决方法

1、通过sys.aud$找到错误密码的主机或应用程序,修改成正确的密码。

2、使用trigger,使用trigger可能会对数据库性能造成影响,可在找到问题原因后删除trigger,以下trigger内容引用自墨天轮文档:https://www.modb.pro/db/20928

CREATE OR REPLACE TRIGGER logon_denied_to_alert
  AFTER servererror ON DATABASE
DECLARE
  -- author: anbob.com
  -- purpose: print logon fail to db alert due to passwd wrong
  message   VARCHAR2(168);
  ip        VARCHAR2(15);
  v_os_user VARCHAR2(80);
  v_db_user varchar2(50);
  v_module  VARCHAR2(50);
  v_action  VARCHAR2(50);
  v_pid     VARCHAR2(10);
  v_sid     NUMBER;
  v_program VARCHAR2(48);
BEGIN
  IF (ora_is_servererror(1017)) THEN
    -- get ip FOR remote connections :
    IF upper(sys_context('userenv', 'network_protocol')) = 'TCP' THEN
      ip := sys_context('userenv', 'ip_address');
    END IF;
    SELECT sid INTO v_sid FROM sys.v_$mystat WHERE rownum < 2;
    SELECT p.spid, v.program
      INTO v_pid, v_program
      FROM v$process p, v$session v
     WHERE p.addr = v.paddr
       AND v.sid = v_sid;
    v_os_user := sys_context('userenv', 'os_user');
	v_db_user := sys_context('userenv', 'SESSION_USER');
    dbms_application_info.read_module(v_module, v_action);
    message := to_char(SYSDATE, 'YYYYMMDD HH24MISS') ||
               ' logon denied from ' || nvl(ip, 'localhost') || ' OSPid:' ||
               v_pid || ' OS User:' || v_os_user || ' DB User:' || v_db_user ||' with ' || v_program || ' – ' ||
               v_module || ' ' || v_action;
    sys.dbms_system.ksdwrt(2, message);
  END IF;
END;
/


3、设置隐含参数_sys_logon_delay=0 关闭该特性
参照MOS文档:How to Troubleshoot Slow Login / Login Hang issues with Database User Authentication? (Doc ID 2724913.1),在11g中event 28401 禁用密码延迟认证的特性可以解决这个问题,在19C中event 28401并不能解决这个问题是由隐含参数“_sys_logon_delay”控制。

alter system set “_sys_logon_delay”=0 scope=spfile;

该参数为静态参数,需要申请停机时间重启数据库生效。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值