千家信息网

如何得到给定SQL的 SQL_ID

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,本文参考盖国强老师的博文进行测试。作者:eygle |English 【转载时请标明出处和作者信息】|【恩墨学院 OCM培训传DBA成功之道】 链接:http://www.eygle.com/arch
千家信息网最后更新 2025年11月09日如何得到给定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. ----------------------------------------------------------------------------------------------------------------------------------------------------------------
  40. c749bc43qqfz3
  41. 接下来看一下执行这个查询,数据库中自动生成的SQL_ID,与通过函数转换生成的完全一致:
  42. SYS@ r7>SELECT SYSDATE FROM DUAL;

  43. SYSDATE
  44. ---------
  45. 21-AUG-17

  46. SYS@ r7>SELECT SQL_ID FROM V$SQL WHERE SQL_TEXT='SELECT SYSDATE FROM DUAL';

  47. SQL_ID
  48. -------------
  49. c749bc43qqfz3

  50. 查看执行计划
  51. SYS@ r7>select * from table(dbms_xplan.display_cursor('c749bc43qqfz3'));

  52. PLAN_TABLE_OUTPUT
  53. ----------------------------------------------------------------------------------------------------------------------------------------------------------------
  54. SQL_ID c749bc43qqfz3, child number 0
  55. -------------------------------------
  56. SELECT SYSDATE FROM DUAL
  57. Plan hash value: 1388734953

  58. -----------------------------------------------------------------
  59. | Id | Operation | Name | Rows | Cost (%CPU)| Time |
  60. -----------------------------------------------------------------
  61. | 0 | SELECT STATEMENT | | | 2 (100)| |
  62. | 1 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |
  63. -----------------------------------------------------------------

  64. 13 rows selected.

作者 函数 数据 数据库 查询 测试 生成 简便 一致 成功 信息 出处 功能 字符 学院 老师 自动生成 这是 链接 问题 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全培训会讲话 web前端开发和网络安全哪个好 关于上报网络安全检查的报告 2012系统安装数据库吗 山西质量软件开发推广 数据库密码修改后进不去 飞机订票数据库录入 企腾网络技术信息 有声方言数据库 南方电网网络安全攻防大赛 在数据库中表的关系一般定义为 龙拓世纪网络技术 长春质量网络技术参考价格 服务器管理口常用地址 学习网络安全法后感300字 数据库更新表时出现死锁 软件开发申报流程 信息网络安全防护典型经验 网络安全宣传活动总结400字 博雅数据库合肥工业大学 湖南联通dns服务器地址云空间 网络运营者常见的网络安全威胁有 软件开发工程师 ssp 网络安全检查 经费的请示 命令行启动数据库文件系统 2020年度网络安全教育家 河南知名的软件开发公司 小学生网络安全情景剧 软件开发说一说自己的优势 派工单系统数据库
0