[20141013]奇怪的sql语句.txt

[20141013]奇怪的sql语句.txt

--今天看生产系统执行计划,发现很奇怪.好在以前遇到类似的问题,很快定位,不过还是要求开发修正程序.
--那scott.emp表来说明:

select * from emp where
empno = 7369 and
         ename='SMITH';

--注意里面有^M,表示ascii=0x0d.如果

$ cat a.sql
select * from emp where
         ename='SMITH';

SCOTT@testdg> @a
     EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 1980-12-17 00:00:00        800                    20

SCOTT@testdg> @dpc '' ''
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
SQL_ID  4a7a2a2uanf4v, child number 0
-------------------------------------
         ename='SMITH'e empno = 7369 and

Plan hash value: 3649078246

--------------------------------------------------------------------------
| Id  | Operation                   | Name         | E-Rows | Cost (%CPU)|
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |              |        |     1 (100)|
|*  1 |  TABLE ACCESS BY INDEX ROWID| EMP          |      1 |     1   (0)|
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP_EMPNO |      1 |     0   (0)|
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("ENAME"='SMITH')
   2 - access("EMPNO"=7369)

--看到的sql语句很奇怪.

SCOTT@testdg> select sql_text from v$sql where sql_id='4a7a2a2uanf4v';
SQL_TEXT
------------------------------------------------------------
ename='SMITH'emp where empno = 7369 and

SCOTT@testdg> select sql_fulltext from v$sql where sql_id='4a7a2a2uanf4v';
SQL_FULLTEXT
----------------------------------------------------------------------------------------------------
select * from emp where
         ename='SMITH'

--看到的sql代码很奇怪.使用dump很容易发现存在问题.看看sql_fulltext的输出,仅仅看到ename='SMITH'的条件,很容易误判.
--我看了一些PB的代码,发现有些开发~r,没有~n.导致出现这种情况.

--关键是如何找到还有那些.我简单写了脚本如下:

SCOTT@testdg> select sql_id,replace(sql_fulltext,chr(13),'') c60 from v$sqlarea where instr(replace(sql_fulltext,chr(13)||chr(10),''),chr(13))>=1;
SQL_ID        C60
------------- ------------------------------------------------------------
4a7a2a2uanf4v select * from emp where
              empno = 7369 and         ename='SMITH'

时间: 2024-08-28 01:13:49

[20141013]奇怪的sql语句.txt的相关文章

[20160704]从跟踪文件抽取sql语句.txt

[20160704]从跟踪文件抽取sql语句.txt --以前写过两篇,链接如下: http://blog.itpub.net/267265/viewspace-775398/ http://blog.itpub.net/267265/viewspace-748041/ 1个利用tkprof的recodr参数,可以记录跟踪整个sql语句序列,缺点就是丢失一些递归的sql语句.另外一个利用awk脚本抽取sql语句. 今天再写一个简单一点的脚本: 1.环境: SCOTT@book> @ &r/v

[20150403]修正sql语句.txt

[20150403]修正sql语句.txt --主要在一些调试与优化时加入hint容易. --参考了链接,我自己做了小量的修改. http://blog.itpub.net/22034023/viewspace-1063610/ /* Formatted on 2015/4/3 9:01:53 (QP5 v5.252.13127.32867) */ --SET LINESIZE 153 SET VERIFY OFF --SET PAGESIZE 10000 --ACCEPT sql_id - -

[20161230]查看父游标中sql语句.txt

[20161230]查看父游标中sql语句.txt --上午巡检完,无聊,测试使用oradebug下查看sql语句在父游标中的内容.sql语句在执行第一次硬解析时生成父子游标,其中父游标chunk --中保存sql语句,测试通过oradebug下如何查看: 1.环境: SCOTT@book> select * from dept where deptno=10;     DEPTNO DNAME          LOC ---------- -------------- -----------

[20150705]从AWR抽取有问题的sql语句.txt

[20150705]从AWR抽取有问题的sql语句.txt --闲着没事,写一个脚本从awr数据里面抽取有问题的sql语句,主要我不想看awr报表,而优化80%的问题集中在sql语句,实际上可能更多. --另外我看报表主要集中在9-11点,下午3-5点这些报表,这样可能漏调一些晚上的一些schedule,job等相关sql语句的优化. --注意一定要在环境变量中设置 --NLS_DATA_FORMAT='YYYY/MM/DD HH24:MI:SS' prompt prompt @deltasql

[20150831]中文符号在sql语句.txt

[20150831]中文符号在sql语句.txt --今天在检查代码时发现sql语句中存在全角的等号"=",很明显oracle并没有报错. --实际上itpub上以前有人提到全角","也不会报错. --自己也测试一下: SCOTT@test> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -----

[20160815]查询相关表的sql语句.txt

[20160815]查询相关表的sql语句.txt --以前我要查询相关表的sql语句,我一般在toad下执行sga trace,直接在sql search text 输入表名,但是这里存在一个问题,仅仅检 --索sql语句的前1000个字节才有效. --如果我要查询的表在1000字符外,无法查询,通过例子说明: 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ---------

[20150527]跟踪单个sql语句.txt

[20150527]跟踪单个sql语句.txt --11G下可以使用如下脚本跟踪单个sql语句,&1 表示 sql_id.   $ cat sql_trace.sql alter system set events 'sql_trace[SQL:&1] level 12'; host sleep 300 alter system set events 'sql_trace[SQL:&1] off'; --缺点生成的文件在各个用户的trc文件中.

[20130226]跟踪特定IP的sql语句.txt

[20130226]跟踪特定IP的sql语句.txt 工作需要,跟踪特定IP地址发出的sql语句.可惜我们生产系统是10g的,如果是11G支持trcsess可以合并trc文件,再分析.自己做一个测试看看. http://space.itpub.net/267265/viewspace-754003 1.建立logon触发器: CREATE OR REPLACE TRIGGER SYS.on_logon_trigger    AFTER LOGON ON DATABASE DECLARE    v

20140321]查看大量消耗资源的sql语句.txt

20140321]查看大量消耗资源的sql语句.txt 昨天看Apress.Oracle.Database.12c.Performance.Tuning.Recipes.Dec.2013.pdf,发现P394提高一个 sql语句查看Resource-Intensive SQL in Memory很有意思,做一个记录: Viewing Resource-Intensive SQL in Memory P394 SELECT sql_id, substr(sql_text,1,20) ,disk_r