如何在Oracle中查找伪游标PSEUDO_CURSOR

从10.2.0.1 开始Oracle 会利用伪游标PSEUDO CURSOR
实现对SCHEMA OBJECT的直接访问,以避免 显示地写SELECT语句而造成的性能损耗。
Oracle官方介绍PSEUDO_CURSOR是RDBMS内部的机制 一般不会对USER用户造成问题。
伪游标PSEUDO CURSOR主要是用来访问数据字典表、LOBS、NCHAR、NVARCHAR2这类对象。
我们来具体看一个  伪游标 PSEUDO CURSOR。
创建一个 h$pseudo_cursor视图 以方便我们了解这些神奇的伪游标。
create or replace view h$pseudo_cursor as
select Pseudo_cursor, sql_id,obj_id hex_obj_id
     ,obj# object_id, u.name owner, o.name object_name
from (select distinct 
             KGLNAOBJ Pseudo_cursor,kglobt03 sql_id
        ,substr(KGLNAOBJ
               ,instr(KGLNAOBJ,'_',1,3)+1
               ,instr(KGLNAOBJ,'_',1,4)-instr(KGLNAOBJ,'_',1,3)-1) obj_id 
       ,(case when 
         replace(translate(substr(upper(KGLNAOBJ)
                                 ,instr(KGLNAOBJ,'_',1,3)+1
                                 ,instr(KGLNAOBJ,'_',1,4)
                                  -instr(KGLNAOBJ,'_',1,3)-1)
                          ,'0123456789ABCDEF','................')
                ,'.') is null then 'Y' else 'N' end) is_safe_to_compare
            from x$kglob) k
   , obj$ o, user$ u
where obj#=decode(is_safe_to_compare,'Y',to_number(obj_id,'xxxxxxxxxx'),0)
   and o.owner#=u.user#;
注意:查询h$pseudo_cursor或x$表,可能会引起严重的library cache latch和mutex contention
column HEX_OBJ_ID  format a10
column PSEUDO_CURSOR format a30
column OWNER format a20
select * from h$pseudo_cursor where sql_id='9rcyz9dnbxgp5';
因为是伪游标 所以SQL文本是系统生成的 如 table_XXXXXX ,除非这些 伪游标有真实的 SQL文本,否则这些伪游标一般无法从V$SQL中获得


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值