理解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;