第11期 如何确定一个SQL语句的SQL_ID?

来源:这里教程网 时间:2026-03-03 20:26:17 作者:

本文档介绍了如何使用V$SQL视图、AWR & ASH数据或关联视图的数据字典查询来确定SQL语句关联文本的SQL_ID。

如何确定一个SQL语句的SQL_ID?

语句的SQL_ID可以在AWR或ASH报告中找到,或者使用V$SQL视图从数据库数据字典中找到。 如果SQL可以用一个特定的可识别的字符串或某种独特的注释来识别,如:/* TARGET SQL */,那么这将使其更容易被找到。 比如:

SELECT /* TARGET SQL */ * FROM dual;
SELECT sql_id, plan_hash_value, substr(sql_text,1,40) sql_text  
FROM  v$sql 
WHERE sql_text like 'SELECT /* TARGET SQL */%'
SQL_ID        PLAN_HASH_VALUE SQL_TEXT
------------- --------------- ----------------------------------------
0xzhrtn5gkpjs       272002086 SELECT /* TARGET SQL */ * FROM dual

为方便起见,这里包含了plan_hash_value。

你也可以在V$SQL视图中使用一个可替换的变量找到SQL_ID:

SELECT sql_id, plan_hash_value, SUBSTR(sql_text,1,40) Text
FROM v$sql
WHERE sql_text LIKE '%&An_Identifiable_String%';

如果在v$sql中找不到这个SQL,你可以在AWR历史视图中找到它: DBA_HIST_SQLTEXT 和 DBA_HIST_SQLSTAT :

SELECT
    s.sql_id,
    s.plan_hash_value,
    t.sql_text,
    s.snap_id
FROM
    dba_hist_sqlstat   s,
    dba_hist_sqltext   t
WHERE s.dbid = t.dbid
AND   s.sql_id = t.sql_id
AND   sql_text LIKE 'SELECT /* TARGET SQL */%'
ORDER BY
    s.sql_id

你可以使用snap_id从AWR中确定SQL的执行时间以及它的其他信息。

相关推荐

热文推荐