[20150803]无法通过sql_id找到sql语句3.txt

[20150803]无法通过sql_id找到sql语句3.txt

--前一阵子,在做优化时遇到1个无法通过sql_id找到sql语句的情况:
http://blog.itpub.net/267265/viewspace-1749265/

--就是因为共享池太小,执行次数少,没到取样时间,已经从共享池清除。

--今天自己google,想想看看还有那种情况会出现呢?如果1条语句执行错误,会记录sql_id,当时查询v$sql视图应该也不能找到。
--自己直接那生产系统看看:

1.建立测试环境:
--看看生产系统的情况:
SYS@xxxxxx:1521/dbcn> @ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

SELECT COUNT (*), sql_id
    FROM V$ACTIVE_SESSION_HISTORY
   WHERE event = 'SQL*Net break/reset to client'
GROUP BY sql_id having count(*)>=9
ORDER BY 1 DESC;

  COUNT(*) SQL_ID
---------- -------------
       369 cm0qrtprj32qv
         9 c21vhszr9gbdq

SYSTEM@xxxxxx:1521/dbcn> @dpc cm0qrtprj32qv ''
PLAN_TABLE_OUTPUT
-----------------------------------------------------------
SQL_ID: cm0qrtprj32qv cannot be found
--无法发现sql语句。

SYS@192.168.99.106:1521/dbcn> select * from v$sql where sql_id='cm0qrtprj32qv';
no rows selected

--查询x$kglob视图:
$ cat shp4.sql
SELECT DECODE (kglhdadr,
               kglhdpar, '父游标句柄地址',
               '子游标句柄地址')
          text,
       kglhdadr,
       kglhdpar,
       substr(kglnaobj,1,20),
       kglobhd0,
       kglobhd6,
       kglobhs0,kglobhs6,kglobt16,
       kglobhs0+kglobhs6+kglobt16,
           kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6+kglobt16 N20
  FROM x$kglob
WHERE kglobt03 = '&1';

SYS@192.168.99.106:1521/dbcn> @sharepool/shp4 cm0qrtprj32qv
old  14:  WHERE kglobt03 = '&1'
new  14:  WHERE kglobt03 = 'cm0qrtprj32qv'

TEXT           KGLHDADR         KGLHDPAR         SUBSTR(KGLNAOBJ,1,20)                    KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16 KGLOBHS0+KGLOBHS6+KGLOBT16        N20
-------------- ---------------- ---------------- ---------------------------------------- ---------------- ---------------- ---------- ---------- ---------- -------------------------- ----------
子游标句柄地址 000000130BCC8228 0000001309E41A28 SELECT PBD_FHGT,PBD_                     00               00                        0          0       4091                       4091       4091
子游标句柄地址 000000130570E978 0000001309E41A28 SELECT PBD_FHGT,PBD_                     00               00                        0          0       4091                       4091       4091
父游标句柄地址 0000001309E41A28 0000001309E41A28 SELECT PBD_FHGT,PBD_                     0000001307FF9158 00                     4976          0          0                       4976       4976

--
SYS@192.168.99.106:1521/dbcn> SELECT distinct kglnaobj c100 from x$kglob where  kglobt03 = 'cm0qrtprj32qv';
C100
----------------------------------------------------------------------------------------------------
SELECT PBD_FHGT,PBD_FWGT,PBD_FITL,PBD_FUNL,PBD_FCHR,PBD_FPTC,PBD_FFCE,PBH_FHGT,PBH_FWGT,PBH_FITL,PBH
_FUNL,PBH_FCHR,PBH_FPTC,PBH_FFCE,PBL_FHGT,PBL_FWGT,PBL_FITL,PBL_FUNL,PBL_FCHR,PBL_FPTC,PBL_FFCE,PBT_
CMNT  FROM SYSTEM.PBCATTBL   WHERE PBT_OWNR = :"SYS_B_0" AND PBT_TNAM = :"SYS_B_1"

--这个是pb的程序,而这个表再我们的系统不存在。
SYS@192.168.99.106:1521/dbcn> @desc SYSTEM.PBCATTBL
ERROR:
ORA-04043: object SYSTEM.PBCATTBL does not exist

--导致每次程序访问是报错。

select trunc(sample_time,'hh24'),sql_id,count(*) from V$ACTIVE_SESSION_HISTORY where sql_id='cm0qrtprj32qv' and sample_time>=trunc(sysdate)+8/24
group by trunc(sample_time,'hh24'),sql_id
order by trunc(sample_time,'hh24') desc ,sql_id;

TRUNC(SAMPLE_TIME,' SQL_ID          COUNT(*)
------------------- ------------- ----------
2015-08-03 10:00:00 cm0qrtprj32qv         28
2015-08-03 09:00:00 cm0qrtprj32qv         94
2015-08-03 08:00:00 cm0qrtprj32qv         60

--当前我执行的时间是10:23,看看9-10点,这个错误就浪费了94秒时间。可以发现执行实在太频繁。

--接着看看另外1条语句:

SYS@xxxxxx:1521/dbcn> SELECT distinct kglnaobj c100 from x$kglob where  kglobt03 = 'c21vhszr9gbdq';
C100
----------------------------------------------------------------------------------------------------
Select csz2 From gy_xtcs where xtxh =:"SYS_B_0" And csmc =:"SYS_B_1"

SYS@xxxxxx:1521/dbcn> @desc portal_his.GY_XTCS
Name   Null?    Type
------ -------- ----------------------------
CSMC   NOT NULL VARCHAR2(40)
CSZ             VARCHAR2(200)
MRZ             VARCHAR2(100)
BZ              VARCHAR2(80)

--根本没有xtxh字段。
--真不知道这种大量无法执行的命令对性能能产生多大的影响。不过都可以通过x$kglob查询到。

时间: 2024-10-23 18:20:55

[20150803]无法通过sql_id找到sql语句3.txt的相关文章

=号附近有语法错误 看来看去都没找到 sql语句没错误呀

问题描述 =号附近有语法错误 看来看去都没找到 sql语句没错误呀 private void button1_Click(object sender, EventArgs e) { string sql = "select count(*) from T_USER where users='" + tb_user.Text.Trim() + "'"; DataSet ds = account.Getdateset(sql); if (ds != null &

[20151221]sql语句优化.txt

[20151221]sql语句优化.txt --自从发现开发乱用distinct以后,链接http://blog.itpub.net/267265/viewspace-1871989/ --我看sql语句特别注意连接多个表,但是显示仅仅一个表的情况,上个星期五,发现一条: sql_id=dpdk3xfd6cvky SELECT EMR_DJMX.ZSFL     FROM MS_YJ01, L_LIS_SQDMX, EMR_DJMX    WHERE     MS_YJ01.YJXH IN (

[20131204]sql语句优化.txt

[20131204]sql语句优化.txt 昨天优化sql语句,遇到一些细节问题,做一个记录: SCOTT@test> @verBANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production create table t (id numb

0624使用10035事件跟踪无法执行的sql语句

[20160624]使用10035事件跟踪无法执行的sql语句.txt --昨天看一份awr报表,链接如下: http://www.itpub.net/thread-2061952-1-1.html --摘要如下: Top 10 Foreground Events by Total Wait Time Event                              Waits     Total Wait Time (sec)    Wait Avg(ms)  % DB time    W

[20120327]toad与sqlplus下执行sql语句的一个细节.txt

TOAD是一个很好的图形化oracle管理工具,昨天在解决一个问题时遇到了一些细节问题,实际上我以前就知道,现在把它写下来: 我使用toad版本是9.6.0.27. 1.在sqlplus下执行如下: SQL> select /*+ zzzz */ * from dept where deptno=10;     DEPTNO DNAME          LOC ---------- -------------- -------------         10 ACCOUNTING     N

[20131217]从sql语句计算sql_id.txt

[20131217]从sql语句计算sql_id.txt 这个方面的内容从网上能找到许多,从sql语句可以检查出sql_id的值以及HASH_VALUE的值. http://www.johnnydb.com/2012/03/sql_id-vs-hash_value/www.dbthink.com/?p=321 自己做一些测试以及总结,记录一些简单的方法在11G下: SYS@test> @verBANNER----------------------------------------------

找到replication相关的作业和sql语句

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 在排查 replication问题过程中,经常需要为指定的agent添加verbose log.这 首先要找到相关的作业.但在 复杂的replication环境中,一台服务器里包可能含了上百个作业,一个个去点开定义去查看简直就是噩梦. 下面的文章介绍了如何快速定位作业.所有信息都可以在Distributor 服务器里找到,以Merge replication为例子:

[20171110]sql语句相同sql_id可以不同吗

[20171110]sql语句相同sql_id可以不同吗.txt --//提一个问题,就是sql语句相同sql_id可以不同吗? --//使用dbms_shared_pool.markhot就可以做到. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -------------------

为什么数据库有时候不能定位阻塞(Blocker)源头的SQL语句

    在SQL Server数据库或OACLE数据库当中,通常一个会话持有某个资源的锁,而另一个会话在请求这个资源,就会出现阻塞(blocking).这是DBA经常会遇到的情况.当出现SQL语句的阻塞时,很多人想查看阻塞的源头(哪个SQL语句阻塞了哪个SQL),这样方便直观.简洁明了的定位问题.但是很多时候,很多场景,我们通过SQL语句并不能或者说不容易定位到阻塞者(Blocker)的SQL语句,当然我们可以很容易找到被阻塞的SQL语句,以及它在等待的锁资源.下面我们先分析一下SQL Serv