需要申请句柄时候才会显示这个内存结构,这个过程很快,相对比较闲的系统是抓不到的,模拟个SQL,造成Library cache pin或者lock等待后就可以了
-------------------SESSION 1-----------------------
SQL> select sid from v$mystat where rownum =1;
SID
----------
628
SQL> create or replace procedure albert is
2 begin
3 for i in 1..10000 loop
4 insert into t values('ALBERT',i);
5 commit;
6 end loop;
7 dbms_lock.sleep(10000);
8 end;
9 /
Procedure created.
-------------------SESSION 2------------------------
SQL> select sid from v$mystat where rownum =1;
SID
----------
3132
SQL>
begin
albert;
end;
/
-------------------SESSION 3--------------------------
SQL> select sid from v$mystat where rownum =1;
SID
----------
2507
SQL> alter table t rename to t1;
Table altered.
SQL> alter table t1 rename to t;
Table altered.
SQL> alter procedure albert compile;
-------------------SESSION 4--------------------------
SQL> select sid from v$mystat where rownum =1;
SID
----------
3757
alter procedure albert compile;
验证结果,出现library cache lock 等待
select event,p1raw,count(*) from v$session where wait_class !='Idle' and event like '%lock%' group by event,p1raw;
EVENT P1RAW COUNT(*)
---------------------------------------------------------------- ---------------- ----------
library cache lock 000000016C3C5220 1
SQL> select KGLLKHDL,KGLLKSNM,KGLLKCNT,KGLLKMOD,KGLLKREQ from x$kgllk where KGLNAOBJ='ALBERT';
KGLLKHDL KGLLKSNM KGLLKCNT KGLLKMOD KGLLKREQ
---------------- ---------- ---------- ---------- ----------
000000016C3C5220 3757 0 0 3
000000016C3C5220 3132 1 1 0
000000016C3C5220 2507 1 3 0