网上查了一大堆信息,什么:
SELECT OSUSER, PROGRAM, USERNAME, SCHEMANAME, STATUS, B.SQL_TEXT
  FROM V$SESSION A, V$SQL B
WHERE A.SQL_ADDRESS = B.ADDRESS
   AND A.SQL_HASH_VALUE = B.HASH_VALUE
   AND a.sid = 140
等等很多,为什么找出来的都sql_text为空或者不是刚刚执行过的语句,请大家解惑!谢谢!
还有,v$sql,v$sqlarea,v$sqltext这些视图都有什么区别呢?

解决方案 »

  1.   

    1、查一下这些视图的定义你就能理解,它们的源都是一个。
    SELECT view_definition FROM v$fixed_view_definition        WHERE view_name='GV$SQL';
    SELECT view_definition FROM v$fixed_view_definition        WHERE view_name='GV$SQL_AREA';2、实际上最模糊的是v$sql与v$sqlarea,区别与联系除biti说的还有:a、v$sql_area相当于是按INST_ID, KGLNAOBJ, KGLHDPAR, KGLNAHSH, KGLNATIM, GLOBTS0,GLOBT19, KGLOBTS1, KGLOBT20,DECODE(KGLOBT33, 1, 'Y', 'N'),KGLHDCLT这些列的自v$sql的group by,也就是说v$sql的每一行表示的是每一个sql语句的一个versiion,而v$sqlarea存放的是相同语句不同version一个汇总。b、 v$sql与v$sqlarea的源都是一个:X$KGLCURSORc、实际调优中建议使用v$sql,相对来说比v$sqlarea快,而且还不会产生share pool latch的争用。3、因v$sql及v$sqlarea存放着统计信息在调优时使用居多,但其sql是不全的,如果想获得完整的sql就要用v$sqltext了。 
      

  2.   

    v$sqltext
    存储的是完整的SQL,SQL被分割SQL> desc v$sqltext
    Name                                      Null?    Type
    ----------------------------------------- -------- ----------------------------
    ADDRESS                                            RAW(4)    ---------
    HASH_VALUE                                         NUMBER   ---------  和 address 一起唯一标志一条sql
    COMMAND_TYPE                                       NUMBER
    PIECE                                              NUMBER   ----------  分片之后的顺序编号
    SQL_TEXT                                           VARCHAR2(64)   --------------  注意长度v$sqlarea   ---------  存储的SQL 和一些相关的信息,比如累计的执行次数,逻辑读,物理读等统计信息
    SQL> desc v$sqlarea
    Name                                      Null?    Type
    ----------------------------------------- -------- ----------------------------
    SQL_TEXT                                           VARCHAR2(1000)
    SHARABLE_MEM                                       NUMBER
    PERSISTENT_MEM                                     NUMBER
    RUNTIME_MEM                                        NUMBER
    SORTS                                              NUMBER
    VERSION_COUNT                                      NUMBER
    LOADED_VERSIONS                                    NUMBER
    OPEN_VERSIONS                                      NUMBER
    USERS_OPENING                                      NUMBER
    FETCHES                                            NUMBER
    EXECUTIONS                                         NUMBER
    USERS_EXECUTING                                    NUMBER
    LOADS                                              NUMBER
    FIRST_LOAD_TIME                                    VARCHAR2(38)
    INVALIDATIONS                                      NUMBER
    PARSE_CALLS                                        NUMBER
    DISK_READS                                         NUMBER
    BUFFER_GETS                                        NUMBER
    ROWS_PROCESSED                                     NUMBER
    COMMAND_TYPE                                       NUMBER
    OPTIMIZER_MODE                                     VARCHAR2(25)
    PARSING_USER_ID                                    NUMBER
    PARSING_SCHEMA_ID                                  NUMBER
    KEPT_VERSIONS                                      NUMBER
    ADDRESS                                            RAW(4)
    HASH_VALUE                                         NUMBER
    MODULE                                             VARCHAR2(64)
    MODULE_HASH                                        NUMBER
    ACTION                                             VARCHAR2(64)
    ACTION_HASH                                        NUMBER
    SERIALIZABLE_ABORTS                                NUMBER
    CPU_TIME                                           NUMBER
    ELAPSED_TIME                                       NUMBER
    IS_OBSOLETE                                        VARCHAR2(1)
    CHILD_LATCH                                        NUMBER
    v$sql     ----------  存储的是具体的SQL 和执行计划相关信息,实际上,v$sqlarea 可以看做 v$sql 根据 sqltext 等 做了 group by 之后的信息
    SQL> desc v$sql
    Name                                      Null?    Type
    ----------------------------------------- -------- ----------------------------
    SQL_TEXT                                           VARCHAR2(1000)
    SHARABLE_MEM                                       NUMBER
    PERSISTENT_MEM                                     NUMBER
    RUNTIME_MEM                                        NUMBER
    SORTS                                              NUMBER
    LOADED_VERSIONS                                    NUMBER
    OPEN_VERSIONS                                      NUMBER
    USERS_OPENING                                      NUMBER
    FETCHES                                            NUMBER
    EXECUTIONS                                         NUMBER
    USERS_EXECUTING                                    NUMBER
    LOADS                                              NUMBER
    FIRST_LOAD_TIME                                    VARCHAR2(38)
    INVALIDATIONS                                      NUMBER
    PARSE_CALLS                                        NUMBER
    DISK_READS                                         NUMBER
    BUFFER_GETS                                        NUMBER
    ROWS_PROCESSED                                     NUMBER
    COMMAND_TYPE                                       NUMBER
    OPTIMIZER_MODE                                     VARCHAR2(10)
    OPTIMIZER_COST                                     NUMBER
    PARSING_USER_ID                                    NUMBER
    PARSING_SCHEMA_ID                                  NUMBER
    KEPT_VERSIONS                                      NUMBER
    ADDRESS                                            RAW(4)
    TYPE_CHK_HEAP                                      RAW(4)
    HASH_VALUE                                         NUMBER
    PLAN_HASH_VALUE                                    NUMBER
    CHILD_NUMBER                                       NUMBER    ----------  注意这个  
    MODULE                                             VARCHAR2(64)
    MODULE_HASH                                        NUMBER
    ACTION                                             VARCHAR2(64)
    ACTION_HASH                                        NUMBER
    SERIALIZABLE_ABORTS                                NUMBER
    OUTLINE_CATEGORY                                   VARCHAR2(64)
    CPU_TIME                                           NUMBER
    ELAPSED_TIME                                       NUMBER
    OUTLINE_SID                                        NUMBER    --------------  注意这里跟 outline 有关
    CHILD_ADDRESS                                      RAW(4) 
    SQLTYPE                                            NUMBER
    REMOTE                                             VARCHAR2(1)
    OBJECT_STATUS                                      VARCHAR2(19)
    LITERAL_HASH_VALUE                                 NUMBER
    LAST_LOAD_TIME                                     VARCHAR2(38)
    IS_OBSOLETE                                        VARCHAR2(1)
    CHILD_LATCH                                        NUMBER
    另外注意这个
    QL> desc v$sql_plan
    Name                                      Null?    Type
    ----------------------------------------- -------- ----------------------------
    ADDRESS                                            RAW(4)
    HASH_VALUE                                         NUMBER
    CHILD_NUMBER                                       NUMBER   ------------   注意这个和 v$sql 里面的相同字段
    OPERATION                                          VARCHAR2(60)
    OPTIONS                                            VARCHAR2(60)
    OBJECT_NODE                                        VARCHAR2(20)
    OBJECT#                                            NUMBER
    OBJECT_OWNER                                       VARCHAR2(30)
    OBJECT_NAME                                        VARCHAR2(64)
    OPTIMIZER                                          VARCHAR2(40)
    ID                                                 NUMBER
    PARENT_ID                                          NUMBER
    DEPTH                                              NUMBER
    POSITION                                           NUMBER
    SEARCH_COLUMNS                                     NUMBER
    COST                                               NUMBER
    CARDINALITY                                        NUMBER
    BYTES                                              NUMBER
    OTHER_TAG                                          VARCHAR2(70)
    PARTITION_START                                    VARCHAR2(10)
    PARTITION_STOP                                     VARCHAR2(10)
    PARTITION_ID                                       NUMBER
    OTHER                                              VARCHAR2(4000)
    DISTRIBUTION                                       VARCHAR2(40)
    CPU_COST                                           NUMBER
    IO_COST                                            NUMBER
    TEMP_SPACE                                         NUMBER
    ACCESS_PREDICATES                                  VARCHAR2(4000)
    FILTER_PREDICATES                                  VARCHAR2(4000)
    实际上,看起来同样的一句SQL ,往往具有不同的执行计划
    如果是不同的数据库用户,那么相应的涉及的 对象 可能都不一样,注意v$sql 中 
    OBJECT#                                            NUMBER
    OBJECT_OWNER                                       VARCHAR2(30)
    OBJECT_NAME                                        VARCHAR2(64)
    OPTIMIZER                                          VARCHAR2(40)即使是相同的数据库用户,若 session 的优化模式、session 级的参数 等不一样,执行计划也能不同。所以即使相同的sql,也可能具有不同的执行计划!v$sql   join  to  v$sql_plan  就代表了具体的sql的执行计划,通过下面3个字段做连接ADDRESS                                            RAW(4)
    HASH_VALUE                                         NUMBER
    CHILD_NUMBER                                       NUMBER
    而v$SQLAREA 忽略了  执行计划 等差异,只是在形式上sql文本看起来一样!相当于做了个聚合,是多个不同执行计划的sql的聚合和累计信息
      

  3.   

    [oracle@oracle ~]$ sqlplus scott/scottSQL*Plus: Release 10.2.0.1.0 - Production on Thu Mar 11 01:19:19 2010Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining optionsSP2-0103: Nothing in SQL buffer to run.
    scott@HUOJI> update emp set sal=5454 where ename = 'HUOJI';1 row updated
    sys@HUOJI> select sql_address,prev_sql_addr from v$session where
      2  sid = 149;SQL_ADDR PREV_SQL
    -------- --------
    00       30973874sys@HUOJI> select sql_text from v$sql where address = '30973874';SQL_TEXT
    ----------------------------------------------------------------------------------------------------
    BEGIN DBMS_OUTPUT.GET_LINES(:LINES, :NUMLINES); END;为什么查出来的是这条语句呢?
      

  4.   

    楼主是用plsql developer执行的语句吧
    这个工具在执行前后都会执行一些其自定义的语句,用来搜集必要的显示信息的。