~沉%淀~

一切有为法,如梦幻泡影,如露亦如电,应作如是观

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

理解v$sql的exact_matching_signature与force_matching_signature


对SQL语句,去掉重复的空格(不包括字符常量),将大小写转换成相同,比如均为大写(不包括字符常量)后,如果SQL相同,那么SQL语句的exact_matching_signature就是相同的。
对SQL语句,去掉重复的空格(不包括字符常量),将大小写转换成相同,比如均为大写(不包括字符常量),然后去掉SQL中的常量,如果SQL相同,那么SQL语句的force_matching_signature就是相同的。


但是例外的情况是:如果SQL中有绑定变量,force_matching_signature就会与exact_matching_signature一样的生成标准。

 

=================================================================================================================
sql text 相近的sql FORCE_MATCHING_SIGNATURE 相同

因此可以使用下面的语句查找没有绑定变量的SQL:

SELECT *
  FROM (SELECT sql_id,
               sql_text,
               FORCE_MATCHING_SIGNATURE,
               COUNT (1) OVER (PARTITION BY FORCE_MATCHING_SIGNATURE) rid
          FROM v$sql
         WHERE     FORCE_MATCHING_SIGNATURE > 0
               AND FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE)
 WHERE rid > 100;




========================================================================================================================



select FORCE_MATCHING_SIGNATURE, count(1)
  from v$sql
 where FORCE_MATCHING_SIGNATURE > 0
   and FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE
 group by FORCE_MATCHING_SIGNATURE
having count(1) > &a
 order by 2;

 

posted on 2020-05-08 17:03  ~沉%淀~  阅读(444)  评论(0编辑  收藏  举报