iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >捕获非绑定变量的SQL语句
  • 298
分享到

捕获非绑定变量的SQL语句

2024-04-02 19:04:59 298人浏览 薄情痞子
摘要

之前一直用如下sql来查看非绑定变量的sql,但是不准select hash_value, substr(sql_text, 1, 80) &nb

之前一直用如下sql来查看非绑定变量的sql,但是不准

select hash_value, substr(sql_text, 1, 80)
  from v$sqlarea
 where substr(sql_text, 1, 40) in
       (select substr(sql_text, 1, 40)
          from v$sqlarea
        having count(*) > 1
         group by substr(sql_text, 1, 40));

SELECT substr(sql_text, 1, 80), count(1)
  FROM v$sql
 GROUP BY substr(sql_text, 1, 80)
HAVING count(1) > 1
 ORDER BY 2;

10g之后,oracle对v$sql视图进行了变更,添加了一个新的字段FORCE_MATCHING_SIGNATURE该字段oracle对于其解释为The signature used when the CURSOR_SHARING parameter is set to FORCE

初步的理解应该是假定数据库的cursor_sharing为force时计算得到的值,

而EXACT_MATCHING_SIGNATURE的解释为Signature calculated on the nORMalized SQL text. The normalization includes the removal of white space and the uppercasing of all non-literal strings.

个人的理解为当sql语句进入数据库中时对于一些可以潜在可以共享或者因为绑定变量问题造成游标没有共享的sql他的FORCE_MATCHING_SIGNATURE值完全相同,而EXACT_MATCHING_SIGNATURE值是不同的

下面在11gr2中做个测试

MOE@xbtst SQL>select * from test;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGo
        40 OPERATIONS     BOSTON

MOE@xbtst SQL>alter system flush shared_pool;

System altered.

MOE@xbtst SQL>select * from test where deptno=10;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK

MOE@xbtst SQL>select * from test where deptno=20;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        20 RESEARCH       DALLAS

MOE@xbtst SQL>select * from test where deptno=30;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        30 SALES          CHICAGO

MOE@xbtst SQL>select * from test where deptno='10';

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK

MOE@xbtst SQL>select * from test where deptno='20';

    DEPTNO DNAME          LOC
---------- -------------- -------------
        20 RESEARCH       DALLAS

MOE@xbtst SQL>select * from test where deptno='30';

    DEPTNO DNAME          LOC
---------- -------------- -------------
        30 SALES          CHICAGO

MOE@xbtst SQL>var v_id number
MOE@xbtst SQL>exec :v_id := 10

PL/SQL procedure successfully completed.

MOE@xbtst SQL>select * from test where deptno=:v_id;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK

MOE@xbtst SQL>exec :v_id := 20

PL/SQL procedure successfully completed.

MOE@xbtst SQL>select * from test where deptno=:v_id;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        20 RESEARCH       DALLAS

MOE@xbtst SQL>exec :v_id := 30

PL/SQL procedure successfully completed.

MOE@xbtst SQL>select * from test where deptno=:v_id;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        30 SALES          CHICAGO

MOE@xbtst SQL>set line 123
MOE@xbtst SQL>col sql_text format a40
MOE@xbtst SQL>set numwidth 30
MOE@xbtst SQL>select sql_text,FORCE_MATCHING_SIGNATURE,EXACT_MATCHING_SIGNATURE FROM V$SQL WHERE sql_text like '%select * from test%';

SQL_TEXT                                       FORCE_MATCHING_SIGNATURE       EXACT_MATCHING_SIGNATURE
---------------------------------------- ------------------------------ ------------------------------
select * from test where deptno=20                  1674223644458057282            5701787720123824641
select * from test where deptno='20'                1674223644458057282            6624213459289620561
select * from test where deptno='30'                1674223644458057282           15799720645668840753
select * from test where deptno='10'                1674223644458057282            7423854019058606662
select * from test where deptno=30                  1674223644458057282            6295409922938069091
select * from test where deptno=10                  1674223644458057282            5918141949209886904
select * from test where deptno=:v_id               5038495461207490287            5038495461207490287

MOE@xbtst SQL>show parameter cursor_shar

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cursor_sharing                       string      EXACT

可以看到以上的sql在没有使用绑定变量的sql中FORCE_MATCHING_SIGNATURE值均是相同的而EXACT_MATCHING_SIGNATURE是不同的那么通过以上的sql我们就可以完善出查找没有使用绑定变量的sql语句:

MOE@xbtst SQL>select *
  2    from (select sql_text,
  3                 row_number() over(partition by FORCE_MATCHING_SIGNATURE order by FORCE_MATCHING_SIGNATURE) rn
  4            from v$sql
  5           where FORCE_MATCHING_SIGNATURE > 0
  6             and FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE)
  7   where rn > 1;

SQL_TEXT                                                             RN
---------------------------------------- ------------------------------
select * from test where deptno='30'                                  2
select * from test where deptno='20'                                  3
select * from test where deptno=10                                    4
select * from test where deptno=30                                    5
select * from test where deptno=20                                    6


参考:关于高效捕获数据库非绑定变量的SQL语句

您可能感兴趣的文档:

--结束END--

本文标题: 捕获非绑定变量的SQL语句

本文链接: https://www.lsjlt.com/news/45581.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用FORCE_MATCHING_SIGNATURE捕获非绑定变量SQL
    sql text 相近的sql FORCE_MATCHING_SIGNATURE 相同 因此可以使用下面的语句查找没有绑定变量的SQL SELECT *  &...
    99+
    2024-04-02
  • sql查找未使用绑定变量的语句
    本篇内容主要讲解“sql查找未使用绑定变量的语句”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sql查找未使用绑定变量的语句”吧!一、查找方法:从ORACLE1...
    99+
    2024-04-02
  • 如何使用mysqlsniffer捕获SQL语句
    本篇内容主要讲解“如何使用mysqlsniffer捕获SQL语句”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用mysqlsniffer捕获SQL语句”吧...
    99+
    2024-04-02
  • oracle如何查找一段时间内的非绑定变量sql
    这篇文章主要介绍了oracle如何查找一段时间内的非绑定变量sql,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。查找一段时间内的非绑定变量s...
    99+
    2024-04-02
  • mysql中怎么利用sniffer捕获SQL语句
    这篇文章给大家介绍mysql中怎么利用sniffer捕获SQL语句,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MySQL5.1之前general log不能在运行时启用或禁用,有时想...
    99+
    2024-04-02
  • PLSQL并非所有变量都已绑定
    在PL/SQL中,所有变量并不都需要绑定。PL/SQL中的变量分为两种类型:绑定变量和未绑定变量。绑定变量是在编译时绑定到特定值的变...
    99+
    2023-09-27
    PLSQL
  • ORA-01008: 并非所有变量都已绑定
    ORA-01008错误是Oracle数据库的一个常见错误,它表示在SQL语句中有一个或多个变量没有被正确绑定。这个错误通常发生在使用...
    99+
    2023-09-01
    ORA-01008
  • C#Oracle并非所有变量都已绑定
    在C#中,Oracle数据库并不是所有变量都已绑定。在编写SQL查询时,可以使用绑定变量来代替具体的值,这样可以提高查询的性能和安全...
    99+
    2023-08-18
    C#
  • Go语言编译原理之变量捕获
    目录前言变量捕获概述变量捕获底层实现总结前言 在前边的几篇文章中已经基本分享完了编译器前端的一些工作,后边的几篇主要是关于编译器对抽象语法树进行分析和重构,然后完成一系列的优化,其中...
    99+
    2024-04-02
  • PL/SQL的绑定变量是什么意思
    PL/SQL的绑定变量是在SQL语句中使用冒号(:)来引用的变量,这些变量在执行SQL语句时由应用程序或用户提供。绑定变量可以在SQ...
    99+
    2024-05-07
    PL/SQL
  • SQL Developer中如何使用绑定变量
    这篇文章将为大家详细讲解有关SQL Developer中如何使用绑定变量,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 Toad是个强大的工...
    99+
    2024-04-02
  • MyBatis的映射器接口与SQL语句绑定
    MyBatis的映射器接口与SQL语句绑定是通过在映射器接口中定义抽象方法,并在映射器配置文件中配置与这些抽象方法对应的SQL语句来...
    99+
    2024-05-08
    MyBatis
  • 解决ORA-01008: 并非所有变量都已绑定
    ORA-01008错误是Oracle数据库中的一个常见错误,它表示在执行SQL语句时,存在未绑定的变量。这意味着在SQL语句中使用了...
    99+
    2023-10-12
    ORA-01008
  • plsql怎么执行带变量的sql语句
    在PL/SQL中,可以使用EXECUTE IMMEDIATE语句执行带变量的SQL语句。以下是一个示例: DECLARE sql...
    99+
    2023-10-23
    plsql sql
  • SQLServer在T-SQL语句中使用变量
    变量的种类 在T-SQL中,变量按生存范围可以分为全局变量(Global Variable)和局部变量(Local Variable) 全局变量是由系统定义的,在整个SQL Serv...
    99+
    2024-04-02
  • 怎么用sql语句给变量赋值
    在SQL中,可以使用SET语句来给变量赋值。具体语法如下: SET @变量名 = 值; 例如,如果你想给变量@myVariable赋...
    99+
    2023-10-23
    sql
  • SQL Server在T-SQL语句中怎么使用变量
    这篇文章主要介绍了SQL Server在T-SQL语句中怎么使用变量的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQL Server在T-SQL语句中怎么使用变量文章都会有所收获,下面我们...
    99+
    2023-06-30
  • sql中如何通过v$sql_bind_capture查看绑定变量
    这篇文章将为大家详细讲解有关sql中如何通过v$sql_bind_capture查看绑定变量,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最近在排查CRMG性能SQL的过程中,大量的SQL需要确定绑定变量...
    99+
    2023-06-06
  • C#并非所有变量都已绑定错误怎么解决
    C#中的"变量未绑定"错误通常出现在以下情况下:1. 变量未声明:确保你在使用变量之前先声明它。在C#中,变量需要在使用之前进行声明...
    99+
    2023-08-19
    C#
  • SQL*Plus中怎么利用DATE类型绑定变量
    这篇文章将为大家详细讲解有关SQL*Plus中怎么利用DATE类型绑定变量,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 SQ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作