X Oracle 利用FORCE_MATCHING_SIGNATURE捕获非绑定变量SQL

理解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;
原文地址:https://www.cnblogs.com/chendian0/p/12851616.html