Oracle查找全表扫描的SQL语句

原文链接:http://blog.itpub.net/9399028/viewspace-678358/

对于SQL的执行计划,一般尽量避免TABLE ACCESS FULL的出现,那怎样去定位,系统里面哪些SQL脚本存在TABLE ACCESS FULL行为,对于9i及以后版本,使用以下语句即可

select *

from v$sql_plan v

where v.operation = 'TABLE ACCESS'

and v.OPTIONS = 'FULL'

and v.OBJECT_OWNER='MS';--指定用户下

查询得到SQL_ID,以及ADDRESS,HASH_VALUE,PLAN_HASH_VALUE,OBJECT_NAME后,就可以定位到具体的SQL语句了。

如:

select s.SQL_TEXT

from v$sqlarea s

where s.SQL_ID = '4dpd97jh2gzsd'

and s.HASH_VALUE = '1613233933'

and s.PLAN_HASH_VALUE = '3592287464';

或者

select s.SQL_TEXT from v$sqlarea s where s.ADDRESS = '00000000A65D2318';