Oracle12C登录卡顿问题
(a) 检查 Failed Logon Delay 的等待事件
登录到数据库并检查等待事件:
SELECT event, total_waits, time_waited, average_waitFROM v$session_eventWHERE event = 'Failed Logon Delay';(b) 检查失败登录记录
通过动态性能视图 dba_audit_session 查看登录失败的详细信息:
SELECT username, os_username, userhost, timestamp, returncodeFROM dba_audit_sessionWHERE returncode !=0ORDERBYtimestampDESC;
常见 returncode的含义:
ORA-01017 无效的用户名或密码。ORA-28000 账户被锁定。
(c) 检查账户状态
检查是否有被锁定的账户:
SELECT username, account_statusFROM dba_usersWHERE account_status LIKE'%LOCKED%';
如果发现有账户被锁定,可以手动解锁:
ALTERUSER username ACCOUNT UNLOCK;(d) 检查登录失败的次数
查看登录失败的次数限制:
SHOWPARAMETER SEC_MAX_FAILED_LOGIN_ATTEMPTS;修改登录失败限制(例如将其设置为 10 次)
这个是静态参数 需要重启生效
ALTERSYSTEMSET SEC_MAX_FAILED_LOGIN_ATTEMPTS =10scope=spfile;-- Create tablecreate table SYS.A_DB_UNSUCCESSFUL_LOGINS(username VARCHAR2(30),osuser VARCHAR2(30),machine VARCHAR2(64),terminal VARCHAR2(30),ipaddr VARCHAR2(30),program VARCHAR2(48),moduleVARCHAR2(48),isdba VARCHAR2(10),errormsg VARCHAR2(60),logon_time DATE default SYSDATE);---create triggerCREATE OR REPLACE TRIGGER SYS.a_db_unsuccessful_login_trgAFTER servererror ON DATABASEDECLAREv_ipaddr a_db_unsuccessful_logins.ipaddr%TYPE;v_logon_user a_db_unsuccessful_logins.username%TYPE;v_machine a_db_unsuccessful_logins.machine%TYPE;v_terminal a_db_unsuccessful_logins.terminal%TYPE;v_osuser a_db_unsuccessful_logins.osuser%TYPE;v_program a_db_unsuccessful_logins.program%TYPE;v_module a_db_unsuccessful_logins.module%TYPE;v_errormsg a_db_unsuccessful_logins.errormsg%TYPE;v_isdba a_db_unsuccessful_logins.isdba%TYPE;v_log_error BOOLEAN DEFAULT FALSE;/************************************************************************name: a_db_unsuccessful_login_trgpurpose: log unsuccessful LOGON action.revisions:ver DATE author description--------- ---------- --------------- ---------------------------------1.0 2023/11/01 norton.fan create this TRIGGER.************************************************************************/BEGIN-- read the contextv_osuser := sys_context('USERENV','OS_USER');v_machine := sys_context('USERENV','HOST');v_terminal := sys_context('USERENV','TERMINAL');v_ipaddr := sys_context('USERENV','IP_ADDRESS');v_logon_user := sys_context('USERENV','SESSION_USER');v_isdba := sys_context('USERENV','ISDBA');--cut strange charfor windows server.v_machine := REPLACE(v_machine,chr(0),'');--fetch additional session info.SELECT program ,moduleINTO v_program ,v_moduleFROM v$sessionWHEREsid= (SELECT sid FROM v$mystat WHERErownum=1);IF is_servererror(1017)THENv_log_error := TRUE;v_errormsg := 'ORA-01017: invalid username/password; logon denied';END IF;IF is_servererror(20017)THENv_log_error := TRUE;v_errormsg := 'ORA-20017: invalid access privilege; logon denied';END IF;IF v_log_errorTHEN--recordthe unsuccessful logonINSERT INTO sys.a_db_unsuccessful_logins(username,osuser,machine,terminal,ipaddr,program,module,isdba,errormsg,logon_time)VALUES(v_logon_user,v_osuser,v_machine,v_terminal,v_ipaddr,v_program,v_module,v_isdba,v_errormsg,SYSDATE);END IF;END a_db_unsuccessful_login_trg;/
如何优化一个看似正常的数据库
查询rownum伪列引起的sql性能问题分析
一个很小的系统为什么负载那么高?
分享一个比较实用的MySQL8一键巡检脚本
Oracle自动处理表空间不足脚本
分享两个ADG监控脚本
Oracle 19C一键巡检脚本分享
oracle常用监控脚本(纯干货,没有EMCC,ZABBIX也不怕)
大量enq: SQ - contention 等待导致系统卡顿
如何优化一个看似正常的数据库
小白也能学会的Oracle优化教程-主打零基础
最好的数据库监控平台-ORACLE EMCC13.5安装配置使用文档
NBU备份oracle详细配置文档(含常见报错处理方法)
Oracle rac如何替换OCR和VOTE磁盘组
谁是DBA圈里最大的背锅侠?