使用Function查找未使用绑定变量的SQL
来源:互联网 发布:ansible 管理windows 编辑:程序博客网 时间:2024/04/27 23:44
如何监控并找出系统中存在的大量的未使用绑定变量的SQL呢?利用TOM大师写的一个函数,我们可以按以下的方法进行查找。
测试环境:10G R2,Red Hat Enterprise Linux Server release 5.2
1.使用DBA用户登录ORACLE,刷新共享池,清除出共享池内的SQL。
SQL> conn /as sysdbaConnected.SQL> alter system flush shared_pool;System altered.
2.创建测试表,并且执行没有使用绑定变量的SQL。
SQL> conn scott/oracleConnected.SQL> create table t2 (a number);Table created.SQL> insert into t2 values(1);1 row created.SQL> insert into t2 values(2);1 row created.SQL> insert into t2 values(3);1 row created.SQL> insert into t2 values(4);1 row created.SQL> insert into t2 values(5);1 row created.SQL> insert into t2 values(6);1 row created.SQL> insert into t2 values(7);1 row created.SQL> insert into t2 values(8);1 row created.SQL> insert into t2 values(9);1 row created.SQL> commit;Commit complete.
3.使用TOM大师的脚本创建函数。
CREATE OR REPLACE FUNCTION remove_constants (p_query IN varchar2) RETURN varchar2AS l_query long; l_char varchar2 (1000); l_in_quotes boolean DEFAULT FALSE ;BEGIN FOR i IN 1 .. LENGTH (p_query) LOOP l_char := SUBSTR (p_query, i, 1); IF (l_char = '''' AND l_in_quotes) THEN l_in_quotes := FALSE; ELSIF (l_char = '''' AND NOT l_in_quotes) THEN l_in_quotes := TRUE; l_query := l_query || '''#'; END IF; IF (NOT l_in_quotes) THEN l_query := l_query || l_char; END IF; END LOOP; l_query := TRANSLATE (l_query, '0123456789', '@@@@@@@@@@'); FOR i IN 0 .. 8 LOOP l_query := REPLACE (l_query, LPAD ('@', 10 - i, '@'), '@'); l_query := REPLACE (l_query, LPAD (' ', 10 - i, ' '), ' '); END LOOP; RETURN UPPER (l_query);END;/
5.复制出一张v$sqlarea的表。
SQL> create table t1 as select sql_text,sql_text sql_text_wo_constants from v$sqlarea;Table created.
SQL> commit;
Commit complete.
6.找出未使用绑定变量的问题SQL。
SQL> update t1 set sql_text_wo_constants = remove_constants(sql_text);512 rows updated.SQL> SELECT sql_text_wo_constants, COUNT ( * ) FROM t1 GROUP BY sql_text_wo_constants HAVING COUNT ( * ) > 5 ORDER BY 2;SQL_TEXT_WO_CONSTANTS COUNT(*)------------------------------ ----------INSERT INTO T@ VALUES(@) 9
- 使用Function查找未使用绑定变量的SQL
- 监控未使用绑定变量的语句
- SQL绑定变量的使用
- 如何监控并找出系统中存在的大量的未使用绑定变量的SQL
- 如何查找硬解析问题,找到未使用绑定变量的SQL---脚本
- SQL执行计划、绑定变量的使用
- 查询未绑定变量的sql
- 如何找出应用程序未使用绑定变量
- 查询未使用绑定变量语句
- 未使用绑定变量检查【摘抄ASKTOM】
- 如何找出应用程序未使用绑定变量,关于绑定变量的再次认识
- 动态SQL使用绑定变量
- PHP使用SQL绑定变量
- 游标变量、动态sql及变量绑定的使用
- 游标变量、动态sql及变量绑定的使用
- 绑定变量的使用
- 查看未绑定变量SQL
- 使用绑定变量的方法(Oracle SQL共享的机制)
- javascript 控制文本框输入
- JAVA 正则表达式学习
- 自动检查屏幕输入框值是否存在
- 浅谈易讯网架构
- OO真经——关于面向对象的哲学体系及科学体系的探讨
- 使用Function查找未使用绑定变量的SQL
- LINQ TO XML(创建XML文档)
- Myeclipse下ext插件spket的配置和安装
- ruijie和Vmware联网虚拟网卡
- LINQ TO XML(查询)
- 应用系统架构设计
- MYSQL [ 优化 --- 索引 ]
- SELinux管理与配置
- 复习C++ 走一遍基础 留下笔记----{四}