暂无图片
分享
LEE
2019-08-09
X$KGLPN 等内部表如何访问?

library cache pin/lock 相关等待 网上排查过程 中有对x$kglpn ,x$kglob访问 


SELECT addr, kglhdadr, kglhdpar, kglnaown, kglnaobj, kglnahsh, kglhdobj

  FROM x$kglob
 WHERE kglhdadr IN (SELECT p1raw
                      FROM v$session_wait
                     WHERE event LIKE 'library%')
/

ADDR     KGLHDADR KGLHDPAR KGLNAOWN   KGLNAOBJ               KGLNAHSH KGLHDOBJ
-------- -------- -------- ---------- -------------------- ---------- --------
404F2178 52D6730C 52D6730C SYS        PINING               2300250318 52D65BA4


但本地模拟过程中无法对 x$ 等内部表查找 ,请问怎么才能查看x$内部表?


收藏
分享
8条回答
默认
最新
LEE

QQ图片20190809161345.png

暂无图片 评论
暂无图片 有用 0
始于脚下

好像只能用sys用户去查,具有dba权限的用户也查不了,你可以测试一下。

暂无图片 评论
暂无图片 有用 0
LEE

QQ图片20190809174013.png

暂无图片 评论
暂无图片 有用 0
LEE

查不出结果

暂无图片 评论
暂无图片 有用 0
章芋文

你这是用了其他工具连的数据库吗?正常sqlplus desc只有Name   Null?    Type。

暂无图片 评论
暂无图片 有用 0
Albert

需要申请句柄时候才会显示这个内存结构,这个过程很快,相对比较闲的系统是抓不到的,模拟个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


暂无图片 评论
暂无图片 有用 0
LEE

感谢各位专家指导

暂无图片 评论
暂无图片 有用 0
LEE
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏