[20120229]无效sql语句与shared pool的问题.txt

昨天遇到一些程序的bug,因为查询要显示1年的信息,因为2011年没有2月29号,导致查询出错。由此想到另外的问题,如果查询存在这些语句,会保留在共享池吗?自己做了一个测试:

SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> select * from emp where hiredate=to_date('2012-02-30','yyyy-mm-dd');
select * from emp where hiredate=to_date('2012-02-30','yyyy-mm-dd')
                                         *
ERROR at line 1:
ORA-01839: date not valid for month specified
SQL> select * from table(dbms_xplan.display_cursor(NULL,NULL,'ALLSTATS LAST PEEKED_BINDS cost'));
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  fv0w0c06d6jsa, child number 0
-------------------------------------
select * from emp where hiredate=to_date('2012-02-30','yyyy-mm-dd')
Plan hash value: 3956160932
--------------------------------------------------------
| Id  | Operation         | Name | E-Rows | Cost (%CPU)|
--------------------------------------------------------
|   0 | SELECT STATEMENT  |      |        |     3 (100)|
|*  1 |  TABLE ACCESS FULL| EMP  |      1 |     3   (0)|
--------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("HIREDATE"=TO_DATE('2012-02-30','yyyy-mm-dd'))
Note
-----
   - Warning: basic plan statistics not available. These are only collected when:
       * hint 'gather_plan_statistics' is used for the statement or
       * parameter 'statistics_level' is set to 'ALL', at session or system level

24 rows selected.
SQL> column aa format a140
SQL> select executions,sql_id,substr(sql_text,1,150) aa from v$sql where sql_id='fv0w0c06d6jsa';
EXECUTIONS SQL_ID        AA
---------- ------------- ---------------------------------------------------------------------
         1 fv0w0c06d6jsa select * from emp where hiredate=to_date('2012-02-30','yyyy-mm-dd')
--居然算执行了。
SQL> column aa format a76
SQL> select sql_id,substr(sql_text,1,76) aa,users_opening,  open_versions,users_executing from v$sql  where sql_id ='fv0w0c06d6jsa';
SQL_ID        AA                                                                           USERS_OPENING OPEN_VERSIONS USERS_EXECUTING
------------- ---------------------------------------------------------------------------- ------------- ------------- ---------------
fv0w0c06d6jsa select * from emp where hiredate=to_date('2012-02-30','yyyy-mm-dd')                      0             0               0
--仅仅USERS_OPENING=0, OPEN_VERSIONS=0.
时间: 2024-08-20 05:11:43

[20120229]无效sql语句与shared pool的问题.txt的相关文章

[20160407]sql语句父子游标的堆转储.txt

[20160407]sql语句父子游标的堆转储.txt --昨天晚上看一些文档,发现可以通过alter session set events 'immediate trace name heapdump_addr level 2,addr 0xXXXXXXXX'; --后面加堆地址,转储里面的内容.自己测试看看: --另外补充说明一下: 我看了jonathan lewis <oracle核心技术> 里面提到ds 应该是 data segment. 1.环境: SCOTT@book> @

关于shared pool的深入探讨(四)

关于shared pool的深入探讨(四) link: http://www.eygle.com/internal/shared_pool-4.htm      我们进一步来讨论一下shared pool的处理: 先进行相应查询,获得测试数据:   [oracle@jumper udump]$ sqlplus "/ as sysdba"SQL*Plus: Release 9.2.0.3.0 - Production on Thu Aug 26 10:21:54 2004Copyrigh

shared pool 深度解析1+

原文整理自网络 1. 深入Shared Pool   Oracle数据库作为一个管理数据的产品,必须能够认出用户所提交的管理命令(通常叫做SQL语句),从而进行响应.认出的过程叫做解析SQL语句的过程,响应的过程叫做执行SQL语句的过程.解析是一个相当复杂的过程,它要考虑各种可能的异常情况,比如SQL语句涉及的对象不存在.提交的用户没有权限等.而且,还需要考虑如何执行SQL语句,采用什么方式去获取数据等.解析的最终结果是要产生Oracle自己内部的执行计划,从而指导SQL的执行过程.可以看到,解

[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 ------------------------------ -------------- -------------------

PHPcmsv9 get标签 sql语句limit无效及num和rows属性无效问题解决办法

PHPcms v9 get标签sql语句limit无效及num和rows属性无效问题至今也已经是一个老问题了,网络上也有一些表面的解决办法,但是逐日者并没有找到从底层,层模板标签解析及模板引擎代码上真正解决此问题的办法和解释.今天在使用get标签sql语句调用数据的时候当然也遇到了此问题,经过研究找到了问题的原因并且整理出本文希望对php爱好者有所帮助. 错误描述:我想从数据表中调取最新的6条数据!  代码如下 复制代码      <dl class="about_text1"&

[C#]无效的 SQL语句;期待 &amp;amp;#x27;DELETE&amp;amp;#x27;、&amp;amp;#x27;INSERT&amp;amp;#x27;、&amp;amp;#x27;PROCEDURE&amp;amp;#x27;、&amp;amp;#x27;SELECT&amp;amp;#x27;、或 &amp;amp;#x27;UPDATE&amp;amp;#x27;

问题描述 stringluru="insertintolyb(dyhm,dlyzt,dlynr,dlysj)values('"+Session["yhm"]+"','"+clyzt+"','"+clynr+"','"+Session["riqi"]+"')";OleDbCommandtianjia=newOleDbCommand(luru,conn);tianjia.

PgSQL · 捉虫动态 · 执行大SQL语句提示无效的内存申请大小

背景 我们执行一个大SQL时(长度大于512M),会返回如下错误: ERROR: invalid memory alloc request size 1073741824 复现 我们首先复现出来这个问题 创建表 create table byteatable(id int, obj bytea); 插入512M大对象 #!/bin/bash data='a' for ((i=1;i<=29;i++)); do data=$data$data done echo 'build ok' psql -

跟踪oracle中sql语句执行过程及相关知识拓展

select * from v$sqlarea; select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00';         这个方法查询结果每条记录显示一条查询语句,且只能查询sql_text小于1000字符的,多余的会被截断.         改进一下: select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00' and sql_text

Shared Pool子池及结果集缓存技术简介

SubPool技术及优势: 从Oracle 9i开始,Shared Pool可以被分割为多个子缓冲池(SubPool)进行管理,以提高并发性,减少竞争. Shared Pool的每个SubPool可以被看作是一个Mini Shared Pool,拥有自己独立的Free List.内存结构以及LRU List.shared pool latch.同时Oracle提供多个Latch对各个子缓冲池进行管理,从而避免单个Latch的竞争(Shared Pool Reserved Area同样进行分割管理