您的位置:首页 > 数据库 > Oracle

如何在Oracle中查找伪游标PSEUDO_CURSOR

2013-05-13 10:20 393 查看
从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中获得
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: