如何在Oracle中查找伪游标PSEUDO_CURSOR

来源:互联网 发布:淘宝下班后回复话术 编辑:程序博客网 时间:2024/05/29 16:52
从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 asselect Pseudo_cursor, sql_id,obj_id hex_obj_id     ,obj# object_id, u.name owner, o.name object_namefrom (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$ uwhere 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 a10column PSEUDO_CURSOR format a30column OWNER format a20select * from h$pseudo_cursor where sql_id='9rcyz9dnbxgp5';
因为是伪游标 所以SQL文本是系统生成的 如 table_XXXXXX ,除非这些 伪游标有真实的 SQL文本,否则这些伪游标一般无法从V$SQL中获得


原创粉丝点击