欢迎光临
我们一直在努力

如何得到给定SQL的 SQL_ID

本文参考盖国强老师的博文进行测试。

作者:eygle |English 【转载时请标明出处和作者信息】|【恩墨学院 OCM培训传DBA成功之道】

链接:http://www.eygle.com/archives/2017/08/dbms_sqltune_util0_sqltext_to_sqlid.html
——————————————————————————————————————-

  1. 在 Oracle 数据库中,如何得到给定SQL的 SQL_ID ? 这是曾经被广泛讨论的一个问题。
  2. 现在,在Oracle 11g中,Oracle 给出了一个系统包,通过 dbms_sqltune_util0 可以简便的计算出给定SQL的SQL_ID。
  3. SQL> desc dbms_sqltune_util0
  4. FUNCTION EXTRACT_BIND RETURNS SQL_BIND
  5.  Argument Name Type In/Out Default?
  6.  
  7.  BIND_DATA RAW IN
  8.  BIND_POS BINARY_INTEGER IN
  9. FUNCTION EXTRACT_BINDS RETURNS SQL_BIND_SET
  10.  Argument Name Type In/Out Default?
  11.  
  12.  BIND_DATA RAW IN
  13. FUNCTION GET_BINDS_COUNT RETURNS BINARY_INTEGER
  14.  Argument Name Type In/Out Default?
  15.  
  16.  BIND_DATA RAW IN
  17. FUNCTION IS_BIND_MASKED RETURNS NUMBER
  18.  Argument Name Type In/Out Default?
  19.  
  20.  BIND_POS BINARY_INTEGER IN
  21.  MASKED_BINDS_FLAG RAW IN DEFAULT
  22. FUNCTION SQLTEXT_TO_SIGNATURE RETURNS NUMBER
  23.  Argument Name Type In/Out Default?
  24.  
  25.  SQL_TEXT CLOB IN
  26.  FORCE_MATCH BINARY_INTEGER IN DEFAULT
  27. FUNCTION SQLTEXT_TO_SQLID RETURNS VARCHAR2
  28.  Argument Name Type In/Out Default?
  29.  
  30.  SQL_TEXT CLOB IN
  31. FUNCTION VALIDATE_SQLID RETURNS BINARY_INTEGER
  32.  Argument Name Type In/Out Default?
  33.  
  34.  SQL_ID VARCHAR2 IN
  35. 函数 sqltext_to_sqlid 用于实现这个功能,以下测试使用了一个简单的SQL查询。
  36. 注意Oracle在SQL最后加入一个 chr(0) 的不可见字符,我们需要补齐:
  37. SYS@ r7>SELECT DBMS_SQLTUNE_UTIL0.SQLTEXT_TO_SQLID(‘SELECT SYSDATE FROM DUAL’||CHR(0)) SQL_ID FROM DUAL;
  38. SQL_ID
  39. c749bc43qqfz3
  40. 接下来看一下执行这个查询,数据库中自动生成的SQL_ID,与通过函数转换生成的完全一致:
  41. SYS@ r7>SELECT SYSDATE FROM DUAL;
  42. SYSDATE
  43. 21AUG17
  44. SYS@ r7>SELECT SQL_ID FROM V$SQL WHERE SQL_TEXT=‘SELECT SYSDATE FROM DUAL’;
  45. SQL_ID
  46. c749bc43qqfz3
  47. 查看执行计划
  48. SYS@ r7>select * from table(dbms_xplan.display_cursor(‘c749bc43qqfz3’));
  49. PLAN_TABLE_OUTPUT
  50. SQL_ID c749bc43qqfz3, child number 0
  51. SELECT SYSDATE FROM DUAL
  52. Plan hash value: 1388734953
  53. | Id | Operation | Name | Rows | Cost (%CPU)| Time |
  54. | 0 | SELECT STATEMENT | | | 2 (100)| |
  55. | 1 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |
  56. 13 rows selected.

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。