Oracle筛选没有使用绑定变量的语句

 

Oracle筛选没有使用绑定变量的语句

 

花时间写了这一条SQL,可以查询出次数大于等于50,一个月内没有使用绑定变量的语句的信息。

select parsing_schema_name 用户,
       module              程序,
       fms_co              次数,
       fms                 特征码,
       sql_id              SQLID号,
       sql_text            "SQL文本(样板)"
  from (select to_char(FORCE_MATCHING_SIGNATURE) fms,
               sql_text,
               parsing_schema_name,
               module,
               SQL_ID,
               count(1) over(partition by FORCE_MATCHING_SIGNATURE order by null) fms_co, --fms的次数>1的表示可能没有使用绑定变量,可能是因为连同使用绑定变量的也会>1
               row_number() over(partition by FORCE_MATCHING_SIGNATURE order by null) rn,
               count(1) over(partition by sql_id order by null) sqlid_co --标志已经使用绑定变量的SQL,sqlid_co>1
          from gv$sql
         where last_active_time >= sysdate - 30 --一个月内
           and to_char(force_matching_signature) != '0'
           and parsing_schema_name not in ('SYS', 'DBSNMP')
         order by fms_co desc)
 where rn = 1
   and fms_co >= 50 --只筛选>=50执行次数的
   --and fms_co != 1
   and sqlid_co = 1;

 

 

需要注意的是,如果存在使用绑定变量,但是语句一样不过多了空格类似的问题也是会被筛选出来,比如

select * from a where a.id = :1 or a.id = :2

select * from a where a.id   = :1 or a.id   = :2

同时存在以上两条SQL会被该脚本筛选出来。

这种情况就没办法了,不过应该会比较少。

 

posted @ 2022-05-25 10:13  PiscesCanon  阅读(105)  评论(0编辑  收藏  举报