如何找出存在FTS的Table ?
可以采用这样的SQL
[@more@]如何找出存在FTS的Table ?
可以采用这样的SQL:
SELECT s.segment_name,s.segment_type,s.owner
FROM dba_extents s,x$bh x
WHERE s.segment_type='TABLE'
AND x.dbarfil=s.file_id
AND x.dbablk between s.block_id and s.block_id+s.blocks-1
AND standard.bitand(x.flag,524288)>0
AND owner<>'SYS';
不过这样的语句可能会十分缓慢,性能视图本身一般也是多个table/view的结合。
可以采用这样:
SELECT o.object_name,o.object_type,o.owner
FROM dba_objects o,x$bh x
WHERE x.obj=o.data_object_id
AND o.object_type='TABLE'
AND standard.bitand(x.flag,524288)>0
AND o.owner<>'SYS';
这里为什么是standard.bitand(x.flag,524288)>0,我查了下metalink又自己测算了下才明白。
在x$bh上,如果该block被sequential read所读取,那相应的flag column会被update为0x80000。
Standard.bitand()我以前没见过,一时也没查到,但是从名字看应该是做logic and运算的,小测一下也确实如此。
那0x80000转成10进制是524288,转2进制是1后面19个0。只有flag=0x80000的值才会standard.bitand(x.flag,524288)>0
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10856805/viewspace-998058/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10856805/viewspace-998058/