library cache lock--通过错误连接模拟

产生library cache lock的原因有几种:下面是通过错误密码 反复连接数据库产生library cache lock的方法。

1.通过shell模拟library cache lock

test.sh

i=0
while [ $i -lt 100 ]
do
nohup sh test1.sh &
i=`expr $i + 1`
done



test1.sh
sqlplus -S dayu/oracle << EOF   --正确密码为dayu
EOF

注:在shell中几种判断

  -eq //等于
  -ne //不等于
  -gt //大于 (greater )
  -lt //小于 (less)
  -ge //大于等于
  -le //小于等于

 

2.查看等待事件以及对应的参数

P1         P2         P3
---------- ---------- ----------
2032301912 2032034704 5177346
2032301912 2031829992 5177347
2032301912 2031697720 5177347
2032301912 2031499312 5177347
2032301912 2031433176 5177347
P1RAW            P2RAW            P3RAW
---------------- ---------------- ----------------
0000000079227758 00000000791E6390 00000000004F0002
0000000079227758 0000000079215CC0 00000000004F0002
0000000079227758 00000000784F4CF8 00000000004F0002
0000000079227758 0000000078596BA8 00000000004F0002

其中P1、P2、P3为十进制的数值(decimal),p1raw、p2raw、p3raw为16进制的数值(hexadecimal),所以2032301912和0000000079227758为同一数值,00000000004F0002和5177347为同一数值。
 
SQL>select parameter1,parameter2,parameter3 from v$event_name where name='library cache lock';

PARAMETER1                     PARAMETER2                     PARAMETER3
------------------------------ ------------------------------ ------------------------------
handle address                 lock address                   100*mode+namespace

 

 

3.PARAMETER3参数的转化

首先需要获得P3的16进制的值,如: 0000 0000 004F 0002,然后截取后边的8位,前边的四位,转换成10进制后代表namespace ,后边的四位转换成10进制后代表mode;000F代表的是79,
通过v$kglob查看对应的name space为ACCOUNT_STATUS而0002代表的是mode=2 share     --3为 Exclusive
SQL> select distinct KGLHDNSP,KGLHDNSD from x$kglob order by 1;

  KGLHDNSP KGLHDNSD
---------- ----------------------------------------------------------------
     0 SQL AREA
     1 TABLE/PROCEDURE
     2 BODY
     3 TRIGGER
     4 INDEX
     5 CLUSTER
    10 QUEUE
    18 PUB SUB INTERNAL INFORMATION
    23 RULESET
    24 RESOURCE MANAGER
    28 SUBSCRIPTION

  KGLHDNSP KGLHDNSD
---------- ----------------------------------------------------------------
    34 TRANSFORMATION
    38 RULE EVALUATION CONTEXT
    45 MULTI-VERSION OBJECT FOR TABLE
    48 MULTI-VERSION OBJECT FOR INDEX
    51 SCHEDULER GLOBAL ATTRIBUTE
    52 SCHEDULER EARLIEST START TIME
    64 EDITION
    69 DBLINK
    73 SCHEMA
    74 DBINSTANCE
    75 SQL AREA STATS

  KGLHDNSP KGLHDNSD
---------- ----------------------------------------------------------------
    79 ACCOUNT_STATUS
    82 SQL AREA BUILD

 

 

最近生产上正好出了一次这样的问题,因此做以上测试、分析、记录。以下为通过audit查看登陆错误相应机器以及用户:

select username,
os_username,
userhost,
client_id,
trunc(timestamp),
count(*) failed_logins
from dba_audit_trail
where returncode=1017 and --1017 is invalid username/password
timestamp < sysdate -7
group by username,os_username,userhost, client_id,trunc(timestamp); 

检查是否开审计的方法如下:
Alter system set audit_trail=DB scope=spfile;
restart DB

audit CREATE SESSION;
audit ALTER USER;

检查:
show parameter audit_trail
select * from DBA_STMT_AUDIT_OPTS;

 

 



posted @ 2018-09-06 18:21  dayu.liu  阅读(1013)  评论(0)    收藏  举报