应用(JDBC)的密码过期或者修改了,应用还是用老的密码在连,由于11g的密码错误延时验证,造成library cache lock。
一开始检查可以看到,处于library cache lock都是JDBC的应用,sql id是空(即还没有开始跑sql)。
检查ash,发现应用唯一的一个sql id是b84cknyvnyq25,是update user$ 表。这就很容易让人联系起来登陆时用户的验证。
11g他有个密码错误延时验证,当应用以错误的密码连接上来时,会持续不断的循环CPU,同时伴随library cache lock。
可以设置event 28401来禁用这个特性。
目前修改后已经正常。
具体的修改过程:
SQL>show parameter event
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
event string
xml_db_events string enable
SQL>alter system set event='28401 trace name context forever,level 1' scope=spfile;
System altered.
SQL>shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>startup