首页 » ORACLE, ORACLE [C]系列 » Oracle 12C wait ‘library cache lock’ after change password even set 28401 event 案例

Oracle 12C wait ‘library cache lock’ after change password even set 28401 event 案例

《library cache lock或row cache lock, Failed Logon Delay 因为错误的密码尝试》和《oracle 12c等待事件: Failed Logon Delay》记录过用户密码错误尝试导致数据库出现大量的library cache lock 和row cache lock。 主要是在11g引入的安全特性延迟密码认证在3-10秒,在延迟期间以X模式持有row cache lock防止同一用户的并发失败尝试。通常是配置28401 event禁用延迟认证特性,但这也不是“万能药”,像这次的案例。 除了密码延迟认证,PASSWORD_LIFE_TIME和FAILED_LOGIN_ATTEMPTS 也是用户的警惕的地方。

密码错误尝试的症状有:
1, 非常高的library cache lock(ACCOUNT)和row cache lock(dc_user)
2, v$session.username为空,因为认证还没通过
3,alter user命令会hang 等待’library cache lock’ or ‘row cache lock’,等待几分钟后最终会成功
4, 锁定用户后,等待时间消失

这是一个12C r2的数据库,通常配置28401 event消失,但这个案例并没有,下面记录一下。

修改了密码以后

SQL> alter user xx identified by xxx;

SQL>@ase.sql

USERNAME           SID EVENT                MACHINE    MODULE               STATUS   LAST_CALL_ET SQL_ID          WAI_SECINW ROW_WAIT_OBJ# SQLTEXT                        BS          CH# OSUSER     HEX
----------- ---------- -------------------- ---------- -------------------- -------- ------------ --------------- ---------- ------------- ------------------------------ ---------- ---- ---------- ---------
                  1212 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              2                 0:2                   -1                                :             0 redis
                  2874 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              2                 0:2                   -1                                :             0 redis
                   127 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              3                 0:3                   -1                                :             0 cbec
                  2615 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              4                 0:5                   -1                                :             0 cbec
                  1136 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              6                 0:6                   -1                                :             0 weblogic
                  1099 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              6                 0:6                   -1                                :             0 vsearch
                   944 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              6                 0:7                   -1                                :             0 vsearch
                   974 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              6                 0:7                   -1                                :             0 weblogic
                   845 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              6                 0:7                   -1                                :             0 weblogic
                  1037 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              6                 0:7                   -1                                :             0 vsearch
                   904 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              6                 0:7                   -1                                :             0 weblogic
                  2636 row cache lock       xxxxxxxxxx python               ACTIVE              6                 0:7                   -1                                :             0 crmmon
                  1024 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              6                 0:7                   -1                                :             0 vsearch
                   836 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              7                 0:7                   -1                                :             0 vsearch
                  2294 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              7                 0:7                   -1                                :             0 cbec
                  1660 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              9                 0:9                   -1                                :             0 cbec
                   798 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              9                 0:9                   -1                                :             0 vsearch
                   760 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              9                 0:9                   -1                                :             0 vsearch
                   721 row cache lock       xxxxxxxxxx sqlplus              ACTIVE              9                 0:10                  -1                                :             0 vsearch
                  2809 row cache lock       xxxxxxxxxx sqlplus              ACTIVE             10                 0:10                  -1                                2:1660        0 vsearch
                   603 row cache lock       xxxxxxxxxx sqlplus              ACTIVE             10                 0:10                  -1                                2:1660        0 vsearch
                   641 row cache lock       xxxxxxxxxx sqlplus              ACTIVE             10                 0:10                  -1                                2:1660        0 vsearch
                   683 row cache lock       xxxxxxxxxx sqlplus              ACTIVE             10                 0:10                  -1                                2:1660        0 vsearch
                   555 row cache lock       xxxxxxxxxx sqlplus              ACTIVE             10                 0:11                  -1                                2:1660        0 vsearch
                   858 row cache lock       xxxxxxxxxx sqlplus              ACTIVE             11                 0:11                  -1                                2:1660        0 vsearch
                   520 row cache lock       xxxxxxxxxx sqlplus              ACTIVE             11                 0:12                  -1                                2:1660        0 vsearch
                   494 row cache lock       xxxxxxxxxx sqlplus              ACTIVE             12                 0:12                  -1                                2:1660        0 taskmon
SYS                 55 row cache lock       xxxxxxxxxx sqlplus              ACTIVE             12 5rzsj7vnvwwrq   0:12             1469878  alter user USER1 account lock 2:1660        0 oracle       2000002
                  2727 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             12                 0:13                  -1                                2:1660        0 cbea
                  2094 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             13                 0:13                  -1                                2:1660        0 cbea
                  2262 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             15                 0:15                  -1                                2:1660        0 oracle
                  1155 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 oracle
                  1181 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 oracle
                   608 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 oracle
                   638 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 oracle
                   665 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 tpcint
                   707 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 oracle
                   747 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 oracle
                   784 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 weblogic
                   824 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 oracle
                   844 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 oracle
                   294 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 oracle
                   303 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 oracle
                   316 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 oracle
                   338 library cache lock   xxxxxxxxxx sqlplus              ACTIVE             16                 0:16                  -1                                2:1660        0 oracle
				   
...

SQL> alter user xxx account lock;

如果不处理很快连接数就会耗尽。先锁定了用户,但是有部分应用还里需要这个用户,有300多台主机没有修改,即使已修改正确的应用也无法使用,这部分主机的错误密码尝试导致整个库无法使用,那有没有办法解决呢?。

尝试配置12801 event

SQL> oradebug eventdump system
10949 trace name context forever, level 1

SQL> alter system set event='10949 trace name context forever, level 1:28401 trace name context forever, level 1' scope=spfile;

System altered.

SQL> alter system set events '28401 trace name context forever, level 1';

System altered.

SQL> oradebug eventdump system
28401 trace name context forever, level 1
10949 trace name context forever, level 1

再次尝试解锁用户。瞬间数据库会话数增加,又出现了library cache lock, row cache lock和之前的一样,此时在节点2锁用户等在那里,尝试从另一节点(节点1) 锁用户,节点1实例还意外crash,并重启了。 alert log

2020-07-09 09:21:06.197000 +08:00
Errors in file /oracle/app/oracle/diag/rdbms/anbob/anbob1/trace/anbob1_lmd1_81560.trc  (incident=737030):
ORA-00600: internal error code, arguments: [kjxscvr:lstat], [[0x534b481e][0x4b773e70],[LB][ext 0x0,0x0][domid 0x0]], [2], [3590001], [35a0000], [], [], [], [], [], [], []
Incident details in: /oracle/app/oracle/diag/rdbms/anbob/anbob1/incident/incdir_737030/anbob1_lmd1_81560_i737030.trc
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Errors in file /oracle/app/oracle/diag/rdbms/anbob/anbob1/trace/anbob1_lmd1_81560.trc:
ORA-00600: internal error code, arguments: [kjxscvr:lstat], [[0x534b481e][0x4b773e70],[LB][ext 0x0,0x0][domid 0x0]], [2], [3590001], [35a0000], [], [], [], [], [], [], []
Dumping diagnostic data in directory=[cdmp_20200709092107], requested by (instance=1, osid=81560 (LMD1)), summary=[incident=737030].
2020-07-09 09:21:07.950000 +08:00
Errors in file /oracle/app/oracle/diag/rdbms/anbob/anbob1/trace/anbob1_lmd1_81560.trc:
ORA-00600: internal error code, arguments: [kjxscvr:lstat], [[0x534b481e][0x4b773e70],[LB][ext 0x0,0x0][domid 0x0]], [2], [3590001], [35a0000], [], [], [], [], [], [], []
Errors in file /oracle/app/oracle/diag/rdbms/anbob/anbob1/trace/anbob1_lmd1_81560.trc  (incident=737031):
ORA-482 [] [] [] [] [] [] [] [] [] [] [] []
Incident details in: /oracle/app/oracle/diag/rdbms/anbob/anbob1/incident/incdir_737031/anbob1_lmd1_81560_i737031.trc
USER (ospid: 81560): terminating the instance due to error 482
opiodr aborting process unknown ospid (4511) as a result of ORA-1092
System state dump requested by (instance=1, osid=81560 (LMD1)), summary=[abnormal instance termination].
System State dumped to trace file /oracle/app/oracle/diag/rdbms/anbob/anbob1/trace/anbob1_diag_81525_20200709092108.trc
2020-07-09 09:21:10.388000 +08:00
License high water mark = 743
2020-07-09 09:21:14.935000 +08:00
Instance terminated by USER, pid = 81560
Warning: 2 processes are still attach to shmid 6782991:
 (size: 40960 bytes, creator pid: 79260, last attach/detach pid: 81521)

----- Call Stack Trace -----
calling              call     entry                
location             type     point                
-------------------- -------- -------------------- 
              
dbgeEndDDEInvocatio  call     dbgexExplicitEndInc  
nImpl()+658                   ()                   
                                                   
kjxscvr()+28666      call     dbgeEndDDEInvocatio  
                              nImpl()                       
kjmxmpm()+16387      call     kjxscvr()            
kjmpbmsg()+6420      call     kjmxmpm()            
kjmdmain_helper()+8  call     kjmpbmsg()           
kjmdm()+79           call     kjmdmain_helper()    
 ksbrdp()+1079        call     kjmdm()              
opirip()+609         call     ksbrdp()             
opidrv()+602         call     opirip()             
                                              

这个ora-600 [kjxscvr:lstat] 是Bug 29392554,影响范围还挺多,直到20C BASE才修复。 在节点2继续lock 用户等了几分钟user lock 成功,library cache lock 消失。除了延迟密码认证还有另一个触发和我们手动lock用户一样的user profile FAILED_LOGIN_ATTEMPTS 自动lock用户,因为用户ACCOUNT_STATUs的改变也是要持有X模式的LIBRARY CACHE LOCK. 下面检查用户的profile.

SQL> @us user1
Show database usernames from dba_users matching %USER1%

USERNAME                  DEFAULT_TABLESPACE        TEMPORARY_TABLESPACE              USER_ID CREATED           PROFILE
------------------------- ------------------------- ------------------------------ ---------- ----------------- --------------------
USER1                     NETM_DAT                  TEMP                                  352 20181205 14:31:09 PRO_APP

 
SQL> select * from dba_profiles where profile='PRO_APP';

PROFILE              RESOURCE_NAME                    RESOURCE LIMIT                                                                                                                            COM INH IMP
-------------------- -------------------------------- -------- -------------------------------------------------------------------------------------------------------------------------------- --- --- ---
PRO_APP             COMPOSITE_LIMIT                  KERNEL   DEFAULT                                                                                                                          NO  NO  NO
PRO_APP             SESSIONS_PER_USER                KERNEL   DEFAULT                                                                                                                          NO  NO  NO
PRO_APP             CPU_PER_SESSION                  KERNEL   DEFAULT                                                                                                                          NO  NO  NO
PRO_APP             CPU_PER_CALL                     KERNEL   DEFAULT                                                                                                                          NO  NO  NO
PRO_APP             LOGICAL_READS_PER_SESSION        KERNEL   DEFAULT                                                                                                                          NO  NO  NO
PRO_APP             LOGICAL_READS_PER_CALL           KERNEL   DEFAULT                                                                                                                          NO  NO  NO
PRO_APP             IDLE_TIME                        KERNEL   DEFAULT                                                                                                                          NO  NO  NO
PRO_APP             CONNECT_TIME                     KERNEL   DEFAULT                                                                                                                          NO  NO  NO
PRO_APP             PRIVATE_SGA                      KERNEL   DEFAULT                                                                                                                          NO  NO  NO
PRO_APP             FAILED_LOGIN_ATTEMPTS            PASSWORD DEFAULT                                                                                                                          NO  NO  NO
PRO_APP             PASSWORD_LIFE_TIME               PASSWORD UNLIMITED                                                                                                                        NO  NO  NO
PRO_APP             PASSWORD_REUSE_TIME              PASSWORD UNLIMITED                                                                                                                        NO  NO  NO
PRO_APP             PASSWORD_REUSE_MAX               PASSWORD 5                                                                                                                                NO  NO  NO
PRO_APP             PASSWORD_VERIFY_FUNCTION         PASSWORD VERIFY_FUNCTION                                                                                                                  NO  NO  NO
PRO_APP             PASSWORD_LOCK_TIME               PASSWORD .0004                                                                                                                            NO  NO  NO
PRO_APP             PASSWORD_GRACE_TIME              PASSWORD UNLIMITED                                                                                                                        NO  NO  NO
PRO_APP             INACTIVE_ACCOUNT_TIME            PASSWORD DEFAULT                                                                                                                          NO  NO  NO

17 rows selected.

SQL> select * from dba_profiles where profile='DEFAULT';

PROFILE              RESOURCE_NAME                    RESOURCE LIMIT                                                                                                                            COM INH IMP
-------------------- -------------------------------- -------- -------------------------------------------------------------------------------------------------------------------------------- --- --- ---
DEFAULT              COMPOSITE_LIMIT                  KERNEL   UNLIMITED                                                                                                                        NO  NO  NO
DEFAULT              SESSIONS_PER_USER                KERNEL   UNLIMITED                                                                                                                        NO  NO  NO
DEFAULT              CPU_PER_SESSION                  KERNEL   UNLIMITED                                                                                                                        NO  NO  NO
DEFAULT              CPU_PER_CALL                     KERNEL   UNLIMITED                                                                                                                        NO  NO  NO
DEFAULT              LOGICAL_READS_PER_SESSION        KERNEL   UNLIMITED                                                                                                                        NO  NO  NO
DEFAULT              LOGICAL_READS_PER_CALL           KERNEL   UNLIMITED                                                                                                                        NO  NO  NO
DEFAULT              IDLE_TIME                        KERNEL   UNLIMITED                                                                                                                        NO  NO  NO
DEFAULT              CONNECT_TIME                     KERNEL   UNLIMITED                                                                                                                        NO  NO  NO
DEFAULT              PRIVATE_SGA                      KERNEL   UNLIMITED                                                                                                                        NO  NO  NO
DEFAULT              FAILED_LOGIN_ATTEMPTS            PASSWORD 10                                                                                                                               NO  NO  NO
DEFAULT              PASSWORD_LIFE_TIME               PASSWORD UNLIMITED                                                                                                                        NO  NO  NO
DEFAULT              PASSWORD_REUSE_TIME              PASSWORD UNLIMITED                                                                                                                        NO  NO  NO
DEFAULT              PASSWORD_REUSE_MAX               PASSWORD UNLIMITED                                                                                                                        NO  NO  NO
DEFAULT              PASSWORD_VERIFY_FUNCTION         PASSWORD VERIFY_FUNCTION_11G                                                                                                              NO  NO  NO
DEFAULT              PASSWORD_LOCK_TIME               PASSWORD 1                                                                                                                                NO  NO  NO
DEFAULT              PASSWORD_GRACE_TIME              PASSWORD 7                                                                                                                                NO  NO  NO
DEFAULT              INACTIVE_ACCOUNT_TIME            PASSWORD UNLIMITED                                                                                                                        NO  NO  NO

17 rows selected.

Note:
从Profile 看出这个用户是密码连续尝试错误10次后锁住用户0.0004天,然后自动解锁。问题就在这自动lock. 既然这个用户短时间内改不完所有的错误密码配置,干脆禁用密码错误尝试记数。

SQL> create profile pfile_for_USER1 limit FAILED_LOGIN_ATTEMPTS unlimited;
Profile created.

SQL> alter user USER1 profile pfile_for_USER1;
User altered.

SQL> alter user USER1 account unlock;
User altered.

Note:
之前大量的library cache lock消失, 库内的负载恢复了正常,只是因为还有大量的错误尝试还是有少量的Failed Logon Delay event等待。

打赏

, , ,

对不起,这篇文章暂时关闭评论。