ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 11gr2中DBA_TAB_MODIFICATIONS视图返回结果异常

11gr2中DBA_TAB_MODIFICATIONS视图返回结果异常

原创 Linux操作系统 作者:yangtingkun 时间:2010-05-26 15:30:59 0 删除 编辑

今天在PUB上看到了一个帖子,查询DBA_TAB_MODIFICATIONS视图的时可能会丢失记录,原贴参考:http://www.itpub.net/thread-1306609-1-2.html

 

 

简单测试了一下:

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 TABLE_NAME 
  2  FROM DBA_TAB_MODIFICATIONS
  3  WHERE ROWNUM < 5;

TABLE_NAME
------------------------------
JAVA$MC$
JAVAOBJ$
JAVASNM$
JOB$

SQL> SELECT TABLE_NAME
  2  FROM DBA_TAB_MODIFICATIONS
  3  WHERE TABLE_NAME = 'JOB$';

未选定行

直接查询DBA_TAB_MODIFICATIONS,可以获取到TABLE_NAME为JOB$的记录,但是如果指定了TABLE_NAME = ‘JOB$’,则无法得到结果。

其实从这个现象很容易判断出,问题是由于执行计划的不同所导致的,增加WHERE条件,使得限制条件被推到视图的查询中,从而改变了执行计划:

SQL> SELECT *
  2  FROM
  3  (
  4     SELECT TABLE_NAME
  5     FROM DBA_TAB_MODIFICATIONS
  6  )
  7  WHERE TABLE_NAME = 'JOB$';

未选定行

SQL> SELECT TABLE_NAME
  2  FROM
  3  (
  4     SELECT ROWNUM, TABLE_NAME
  5     FROM DBA_TAB_MODIFICATIONS
  6  ) A
  7  WHERE TABLE_NAME = 'JOB$';

TABLE_NAME
------------------------------
JOB$

对于这种情况,利用前不久介绍的ROWNUM固定结果集的功能,可以很容易的闭幕错误的产生。

SQL> SET AUTOT ON EXP
SQL> SELECT *
  2  FROM
  3  (
  4     SELECT TABLE_NAME
  5     FROM DBA_TAB_MODIFICATIONS
  6  )
  7  WHERE TABLE_NAME = 'JOB$';

未选定行

--------------------------------------------------------------------------------------------
| Id | Operation                         | Name                | Rows | Bytes | Cost (%CPU)|
--------------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT                  |                     |    4 |   208 |   109   (1)|
|  1 |  NESTED LOOPS                     |                     |    4 |   208 |   109   (1)|
|* 2 |   HASH JOIN                       |                     |    4 |   188 |   109   (1)|
|  3 |    VIEW                           | VW_JF_SET$37FD5EC9  |    4 |   172 |   107   (0)|
|  4 |     UNION-ALL                     |                     |      |       |            |
|  5 |      NESTED LOOPS                 |                     |    2 |    76 |    52   (0)|
|* 6 |       INDEX SKIP SCAN             | I_OBJ2              |    2 |    66 |    51   (0)|
|  7 |       TABLE ACCESS CLUSTER        | TAB$                |    1 |     5 |     1   (0)|
|* 8 |        INDEX UNIQUE SCAN          | I_OBJ#              |    1 |       |     0   (0)|
|* 9 |      INDEX SKIP SCAN              | I_OBJ2              |    1 |    37 |    51   (0)|
| 10 |      NESTED LOOPS                 |                     |    1 |    64 |     4   (0)|
| 11 |       NESTED LOOPS                |                     |    1 |    59 |     3   (0)|
| 12 |        TABLE ACCESS FULL          | TABSUBPART$         |    1 |    26 |     2   (0)|
|*13 |        TABLE ACCESS BY INDEX ROWID| OBJ$                |    1 |    33 |     1   (0)|
|*14 |         INDEX RANGE SCAN          | I_OBJ1              |    1 |       |     1   (0)|
|*15 |       INDEX RANGE SCAN            | I_OBJ1              |    1 |     5 |     1   (0)|
| 16 |    INDEX FULL SCAN                | I_USER2             |   86 |   344 |     1   (0)|
|*17 |   INDEX UNIQUE SCAN               | I_MON_MODS_ALL$_OBJ |    1 |     5 |     0   (0)|
--------------------------------------------------------------------------------------------

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

   2 - access("ITEM_1"="U"."USER#")
   6 - access("O"."NAME"='JOB$')
       filter("O"."NAME"='JOB$')
   8 - access("O"."OBJ#"="T"."OBJ#")
   9 - access("O"."NAME"='JOB$' AND "O"."TYPE#"=19)
       filter("O"."NAME"='JOB$' AND "O"."TYPE#"=19)
  13 - filter("O"."NAME"='JOB$')
  14 - access("O"."OBJ#"="TSP"."OBJ#")
  15 - access("O2"."OBJ#"="TSP"."POBJ#")
  17 - access("ITEM_2"="M"."OBJ#")

SQL> SELECT TABLE_NAME
  2  FROM
  3  (
  4     SELECT ROWNUM, TABLE_NAME
  5     FROM DBA_TAB_MODIFICATIONS
  6  ) A
  7  WHERE TABLE_NAME = 'JOB$';

TABLE_NAME
------------------------------
JOB$

--------------------------------------------------------------------------------------------
| Id  | Operation                           | Name                |Rows|Bytes |Cost (%CPU)|
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                    |                     |  137| 2329 |  279   (1)|
|*  1 |  VIEW                               |                     |  137| 2329 |  279   (1)|
|   2 |   COUNT                             |                     |     |      |           |
|*  3 |    HASH JOIN                        |                     |  137| 4658 |  279   (1)|
|   4 |     INDEX FULL SCAN                 | I_USER2             |   86|  344 |    1   (0)|
|   5 |     VIEW                            | VW_JF_SET$92427269  |  137| 4110 |  277   (1)|
|   6 |      UNION-ALL                      |                     |     |      |           |
|   7 |       NESTED LOOPS                  |                     |    5|  215 |  140   (1)|
|*  8 |        HASH JOIN                    |                     |  131| 4978 |  135   (1)|
|   9 |         INDEX FULL SCAN             | I_MON_MODS_ALL$_OBJ |  131|  655 |    1   (0)|
|  10 |         INDEX FAST FULL SCAN        | I_OBJ2              |72844| 2347K|  133   (0)|
|  11 |        TABLE ACCESS CLUSTER         | TAB$                |    1|    5 |    1   (0)|
|* 12 |         INDEX UNIQUE SCAN           | I_OBJ#              |    1|      |    0   (0)|
|  13 |       NESTED LOOPS                  |                     |  131| 5502 |  133   (0)|
|* 14 |        INDEX FAST FULL SCAN         | I_OBJ2              |  133| 4921 |  133   (0)|
|* 15 |        INDEX UNIQUE SCAN            | I_MON_MODS_ALL$_OBJ |    1|    5 |    0   (0)|
|  16 |       NESTED LOOPS                  |                     |    1|   69 |    4   (0)|
|  17 |        NESTED LOOPS                 |                     |    1|   64 |    3   (0)|
|  18 |         NESTED LOOPS                |                     |    1|   59 |    3   (0)|
|  19 |          TABLE ACCESS FULL          | TABSUBPART$         |    1|   26 |    2   (0)|
|  20 |          TABLE ACCESS BY INDEX ROWID| OBJ$                |    1|   33 |    1   (0)|
|* 21 |           INDEX RANGE SCAN          | I_OBJ1              |    1|      |    1   (0)|
|* 22 |         INDEX UNIQUE SCAN           | I_MON_MODS_ALL$_OBJ |    1|    5 |    0   (0)|
|* 23 |        INDEX RANGE SCAN             | I_OBJ1              |    1|    5 |    1   (0)|
--------------------------------------------------------------------------------------------

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

   1 - filter("TABLE_NAME"='JOB$')
   3 - access("ITEM_1"="U"."USER#")
   8 - access("O"."OBJ#"="M"."OBJ#")
  12 - access("O"."OBJ#"="T"."OBJ#")
  14 - filter("O"."TYPE#"=19)
  15 - access("O"."OBJ#"="M"."OBJ#")
  21 - access("O"."OBJ#"="TSP"."OBJ#")
  22 - access("O"."OBJ#"="M"."OBJ#")
  23 - access("O2"."OBJ#"="TSP"."POBJ#")

显然当TABLE_NAME列的查询条件被推到视图内层后,Oracle对UNION ALL查询进行了优化,将共同查询部分I_MON_MODS_ALL$_OBJ和I_USER2单独出来,而对剩下的部分进行UNION ALL操作。可以看到,即使是通过ROWNUM固定查询结果集,I_USER2的索引扫描仍然从UNION ALL查询中被提取出来。

SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0      Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

SQL> SET AUTOT ON EXP
SQL> SELECT TABLE_NAME
  2  FROM DBA_TAB_MODIFICATIONS
  3  WHERE TABLE_NAME = 'OBJ$';

TABLE_NAME
------------------------------
OBJ$

--------------------------------------------------------------------------------------------
| Id  | Operation                        | Name                  | Rows |Bytes |Cost (%CPU)|
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                 |                       |   26 |  442 |  152   (1)|
|   1 |  VIEW                            | DBA_TAB_MODIFICATIONS |   26 |  442 |  152   (1)|
|   2 |   UNION-ALL                      |                       |      |      |           |
|   3 |    NESTED LOOPS                  |                       |   17 |  765 |   72   (2)|
|   4 |     NESTED LOOPS                 |                       |   17 |  680 |   70   (2)|
|*  5 |      HASH JOIN                   |                       |   17 |  595 |   70   (2)|
|   6 |       TABLE ACCESS BY INDEX ROWID| OBJ$                  |   17 |  527 |   66   (0)|
|*  7 |        INDEX SKIP SCAN           | I_OBJ2                |   17 |      |   57   (0)|
|   8 |       TABLE ACCESS FULL          | USER$                 |  105 |  420 |    3   (0)|
|*  9 |      INDEX UNIQUE SCAN           | I_MON_MODS_ALL$_OBJ   |    1 |    5 |    0   (0)|
|  10 |     TABLE ACCESS CLUSTER         | TAB$                  |    1 |    5 |    1   (0)|
|* 11 |      INDEX UNIQUE SCAN           | I_OBJ#                |    1 |      |    0   (0)|
|  12 |    NESTED LOOPS                  |                       |    1 |   43 |   67   (0)|
|  13 |     NESTED LOOPS                 |                       |    1 |   39 |   66   (0)|
|* 14 |      TABLE ACCESS BY INDEX ROWID | OBJ$                  |    1 |   34 |   66   (0)|
|* 15 |       INDEX SKIP SCAN            | I_OBJ2                |   17 |      |   57   (0)|
|* 16 |      INDEX UNIQUE SCAN           | I_MON_MODS_ALL$_OBJ   |    1 |    5 |    0   (0)|
|  17 |     TABLE ACCESS CLUSTER         | USER$                 |    1 |    4 |    1   (0)|
|* 18 |      INDEX UNIQUE SCAN           | I_USER#               |    1 |      |    0   (0)|
|  19 |    NESTED LOOPS                  |                       |    8 |  440 |   14   (8)|
|* 20 |     HASH JOIN                    |                       |    8 |  400 |   14   (8)|
|  21 |      NESTED LOOPS                |                       |    8 |  368 |   10   (0)|
|  22 |       NESTED LOOPS               |                       |    8 |  120 |    2   (0)|
|  23 |        TABLE ACCESS FULL         | TABSUBPART$           |    8 |   80 |    2   (0)|
|* 24 |        INDEX UNIQUE SCAN         | I_OBJ1                |    1 |    5 |    0   (0)|
|* 25 |       TABLE ACCESS BY INDEX ROWID| OBJ$                  |    1 |   31 |    1   (0)|
|* 26 |        INDEX UNIQUE SCAN         | I_OBJ1                |    1 |      |    0   (0)|
|  27 |      TABLE ACCESS FULL           | USER$                 |  105 |  420 |    3   (0)|
|* 28 |     INDEX UNIQUE SCAN            | I_MON_MODS_ALL$_OBJ   |    1 |    5 |    0   (0)|
--------------------------------------------------------------------------------------------

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

   5 - access("O"."OWNER#"="U"."USER#")
   7 - access("O"."NAME"='OBJ$')
       filter("O"."NAME"='OBJ$')
   9 - access("O"."OBJ#"="M"."OBJ#")
  11 - access("O"."OBJ#"="T"."OBJ#")
  14 - filter("O"."TYPE#"=19)
  15 - access("O"."NAME"='OBJ$')
       filter("O"."NAME"='OBJ$')
  16 - access("O"."OBJ#"="M"."OBJ#")
  18 - access("O"."OWNER#"="U"."USER#")
  20 - access("O"."OWNER#"="U"."USER#")
  24 - access("O2"."OBJ#"="TSP"."POBJ#")
  25 - filter("O"."NAME"='OBJ$')
  26 - access("O"."OBJ#"="TSP"."OBJ#")
  28 - access("O"."OBJ#"="M"."OBJ#")

显然在10.2中,Oracle还不支持这个UNION ALL查询的优化。

但是显然Oracle在进行优化的时候出现了错误。但是奇怪的是,从执行计划上看不出存在任何错误的地方。

查询DBA_TAB_MODIFICATIONS视图的定义:

SQL> SET LONG 10000
SQL> SELECT TEXT
  2  FROM DBA_VIEWS
  3  WHERE VIEW_NAME = 'DBA_TAB_MODIFICATIONS';

TEXT
--------------------------------------------------------------------------------
select u.name, o.name, null, null,
       m.inserts, m.updates, m.deletes, m.timestamp,
       decode(bitand(m.flags,1),1,'YES','NO'),
       m.drop_segments
from sys.mon_mods_all$ m, sys.obj$ o, sys.tab$ t, sys.user$ u
where o.obj# = m.obj# and o.obj# = t.obj# and o.owner# = u.user#
union all
select u.name, o.name, o.subname, null,
       m.inserts, m.updates, m.deletes, m.timestamp,
       decode(bitand(m.flags,1),1,'YES','NO'),
       m.drop_segments
from sys.mon_mods_all$ m, sys.obj$ o, sys.user$ u
where o.owner# = u.user# and o.obj# = m.obj# and o.type#=19
union all
select u.name, o.name, o2.subname, o.subname,
       m.inserts, m.updates, m.deletes, m.timestamp,
       decode(bitand(m.flags,1),1,'YES','NO'),
       m.drop_segments
from sys.mon_mods_all$ m, sys.obj$ o, sys.tabsubpart$ tsp, sys.obj$ o2,
     sys.user$ u
where o.obj# = m.obj# and o.owner# = u.user# and
      o.obj# = tsp.obj# and o2.obj# = tsp.pobj#

这个视图中的第一部分查询表信息,第二部分查询分区信息,第三部分查询子分区信息。因此当前指定TABLE_NAME为JOB$满足第一部分的查询。

如果查询UNION ALL的第一部分可以得到结果,查询第一、二部分或查询第一、三部分,都可以得到正确的结果,甚至这时的执行计划也与出现问题时一致。但是只要同时查询三个部分,就会导致数据的丢失:

SQL> SELECT TABLE_NAME FROM (
  2  select u.name USER_NAME, o.name TABLE_NAME, null PART_NAME, null SUBPART_NAME,
  3         m.inserts, m.updates, m.deletes, m.timestamp,
  4         decode(bitand(m.flags,1),1,'YES','NO'),
  5         m.drop_segments
  6  from sys.mon_mods_all$ m, sys.obj$ o, sys.tab$ t, sys.user$ u
  7  where o.obj# = m.obj# and o.obj# = t.obj# and o.owner# = u.user#
  8  ) WHERE TABLE_NAME ='JOB$';

TABLE_NAME
------------------------------
JOB$

--------------------------------------------------------------------------------------------
| Id  | Operation             | Name                | Rows | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |                     |    2 |    94 |    54   (2)| 00:00:01 |
|   1 |  NESTED LOOPS         |                     |    2 |    94 |    54   (2)| 00:00:01 |
|   2 |   NESTED LOOPS        |                     |    2 |    84 |    53   (2)| 00:00:01 |
|*  3 |    HASH JOIN          |                     |    2 |    74 |    53   (2)| 00:00:01 |
|*  4 |     INDEX SKIP SCAN   | I_OBJ2              |    2 |    66 |    51   (0)| 00:00:01 |
|   5 |     INDEX FULL SCAN   | I_USER2             |   86 |   344 |     1   (0)| 00:00:01 |
|*  6 |    INDEX UNIQUE SCAN  | I_MON_MODS_ALL$_OBJ |    1 |     5 |     0   (0)| 00:00:01 |
|   7 |   TABLE ACCESS CLUSTER| TAB$                |    1 |     5 |     1   (0)| 00:00:01 |
|*  8 |    INDEX UNIQUE SCAN  | I_OBJ#              |    1 |       |     0   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------

SQL> SELECT TABLE_NAME FROM (
  2  select u.name USER_NAME, o.name TABLE_NAME, null PART_NAME, null SUBPART_NAME,
  3         m.inserts, m.updates, m.deletes, m.timestamp,
  4         decode(bitand(m.flags,1),1,'YES','NO'),
  5         m.drop_segments
  6  from sys.mon_mods_all$ m, sys.obj$ o, sys.tab$ t, sys.user$ u
  7  where o.obj# = m.obj# and o.obj# = t.obj# and o.owner# = u.user#
  8  union all
  9  select u.name, o.name, o.subname, null,
 10         m.inserts, m.updates, m.deletes, m.timestamp,
 11         decode(bitand(m.flags,1),1,'YES','NO'),
 12         m.drop_segments
 13  from sys.mon_mods_all$ m, sys.obj$ o, sys.user$ u
 14  where o.owner# = u.user# and o.obj# = m.obj# and o.type#=19
 15  ) WHERE TABLE_NAME ='JOB$';

TABLE_NAME
------------------------------
JOB$

--------------------------------------------------------------------------------------
| Id  | Operation                 | Name                | Rows  | Bytes | Cost (%CPU)|
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |                     |     3 |   156 |   105   (1)|
|   1 |  NESTED LOOPS             |                     |     3 |   156 |   105   (1)|
|*  2 |   HASH JOIN               |                     |     3 |   141 |   105   (1)|
|   3 |    VIEW                   | VW_JF_SET$488245BD  |     3 |   129 |   103   (0)|
|   4 |     UNION-ALL             |                     |       |       |            |
|   5 |      NESTED LOOPS         |                     |     2 |    76 |    52   (0)|
|*  6 |       INDEX SKIP SCAN     | I_OBJ2              |     2 |    66 |    51   (0)|
|   7 |       TABLE ACCESS CLUSTER| TAB$                |     1 |     5 |     1   (0)|
|*  8 |        INDEX UNIQUE SCAN  | I_OBJ#              |     1 |       |     0   (0)|
|*  9 |      INDEX SKIP SCAN      | I_OBJ2              |     1 |    37 |    51   (0)|
|  10 |    INDEX FULL SCAN        | I_USER2             |    86 |   344 |     1   (0)|
|* 11 |   INDEX UNIQUE SCAN       | I_MON_MODS_ALL$_OBJ |     1 |     5 |     0   (0)|
--------------------------------------------------------------------------------------

SQL> SELECT TABLE_NAME FROM (
  2  select u.name USER_NAME, o.name TABLE_NAME, null PART_NAME, null SUBPART_NAME,
  3         m.inserts, m.updates, m.deletes, m.timestamp,
  4         decode(bitand(m.flags,1),1,'YES','NO'),
  5         m.drop_segments
  6  from sys.mon_mods_all$ m, sys.obj$ o, sys.tab$ t, sys.user$ u
  7  where o.obj# = m.obj# and o.obj# = t.obj# and o.owner# = u.user#
  8  union all
  9  select u.name, o.name, o2.subname, o.subname,
 10         m.inserts, m.updates, m.deletes, m.timestamp,
 11         decode(bitand(m.flags,1),1,'YES','NO'),
 12         m.drop_segments
 13  from sys.mon_mods_all$ m, sys.obj$ o, sys.tabsubpart$ tsp, sys.obj$ o2,
 14       sys.user$ u
 15  where o.obj# = m.obj# and o.owner# = u.user# and
 16        o.obj# = tsp.obj# and o2.obj# = tsp.pobj#
 17  ) WHERE TABLE_NAME ='JOB$';

TABLE_NAME
------------------------------
JOB$

--------------------------------------------------------------------------------------------
| Id  | Operation                         | Name                | Rows | Bytes |Cost (%CPU)|
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                     |    3 |   156 |   58   (2)|
|   1 |  NESTED LOOPS                     |                     |    3 |   156 |   58   (2)|
|*  2 |   HASH JOIN                       |                     |    3 |   141 |   58   (2)|
|   3 |    VIEW                           | VW_JF_SET$1CFBCBBE  |    3 |   129 |   56   (0)|
|   4 |     UNION-ALL                     |                     |      |       |           |
|   5 |      NESTED LOOPS                 |                     |    2 |    76 |   52   (0)|
|*  6 |       INDEX SKIP SCAN             | I_OBJ2              |    2 |    66 |   51   (0)|
|   7 |       TABLE ACCESS CLUSTER        | TAB$                |    1 |     5 |    1   (0)|
|*  8 |        INDEX UNIQUE SCAN          | I_OBJ#              |    1 |       |    0   (0)|
|   9 |      NESTED LOOPS                 |                     |    1 |    64 |    4   (0)|
|  10 |       NESTED LOOPS                |                     |    1 |    59 |    3   (0)|
|  11 |        TABLE ACCESS FULL          | TABSUBPART$         |    1 |    26 |    2   (0)|
|* 12 |        TABLE ACCESS BY INDEX ROWID| OBJ$                |    1 |    33 |    1   (0)|
|* 13 |         INDEX RANGE SCAN          | I_OBJ1              |    1 |       |    1   (0)|
|* 14 |       INDEX RANGE SCAN            | I_OBJ1              |    1 |     5 |    1   (0)|
|  15 |    INDEX FULL SCAN                | I_USER2             |   86 |   344 |    1   (0)|
|* 16 |   INDEX UNIQUE SCAN               | I_MON_MODS_ALL$_OBJ |    1 |     5 |    0   (0)|
--------------------------------------------------------------------------------------------

SQL> SELECT TABLE_NAME FROM (
  2  select u.name USER_NAME, o.name TABLE_NAME, null PART_NAME, null SUBPART_NAME,
  3         m.inserts, m.updates, m.deletes, m.timestamp,
  4         decode(bitand(m.flags,1),1,'YES','NO'),
  5         m.drop_segments
  6  from sys.mon_mods_all$ m, sys.obj$ o, sys.tab$ t, sys.user$ u
  7  where o.obj# = m.obj# and o.obj# = t.obj# and o.owner# = u.user#
  8  union all
  9  select u.name, o.name, o.subname, null,
 10         m.inserts, m.updates, m.deletes, m.timestamp,
 11         decode(bitand(m.flags,1),1,'YES','NO'),
 12         m.drop_segments
 13  from sys.mon_mods_all$ m, sys.obj$ o, sys.user$ u
 14  where o.owner# = u.user# and o.obj# = m.obj# and o.type#=19
 15  union all
 16  select u.name, o.name, o2.subname, o.subname,
 17         m.inserts, m.updates, m.deletes, m.timestamp,
 18         decode(bitand(m.flags,1),1,'YES','NO'),
 19         m.drop_segments
 20  from sys.mon_mods_all$ m, sys.obj$ o, sys.tabsubpart$ tsp, sys.obj$ o2,
 21       sys.user$ u
 22  where o.obj# = m.obj# and o.owner# = u.user# and
 23        o.obj# = tsp.obj# and o2.obj# = tsp.pobj#
 24  ) WHERE TABLE_NAME ='JOB$';

未选定行

--------------------------------------------------------------------------------------------
| Id  | Operation                         | Name                | Rows | Bytes | Cost (%CPU)|
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                     |    4 |   208 |  109   (1)|
|   1 |  NESTED LOOPS                     |                     |    4 |   208 |  109   (1)|
|*  2 |   HASH JOIN                       |                     |    4 |   188 |  109   (1)|
|   3 |    VIEW                           | VW_JF_SET$35EDC1EA  |    4 |   172 |  107   (0)|
|   4 |     UNION-ALL                     |                     |      |       |           |
|   5 |      NESTED LOOPS                 |                     |    2 |    76 |   52   (0)|
|*  6 |       INDEX SKIP SCAN             | I_OBJ2              |    2 |    66 |   51   (0)|
|   7 |       TABLE ACCESS CLUSTER        | TAB$                |    1 |     5 |    1   (0)|
|*  8 |        INDEX UNIQUE SCAN          | I_OBJ#              |    1 |       |    0   (0)|
|*  9 |      INDEX SKIP SCAN              | I_OBJ2              |    1 |    37 |   51   (0)|
|  10 |      NESTED LOOPS                 |                     |    1 |    64 |    4   (0)|
|  11 |       NESTED LOOPS                |                     |    1 |    59 |    3   (0)|
|  12 |        TABLE ACCESS FULL          | TABSUBPART$         |    1 |    26 |    2   (0)|
|* 13 |        TABLE ACCESS BY INDEX ROWID| OBJ$                |    1 |    33 |    1   (0)|
|* 14 |         INDEX RANGE SCAN          | I_OBJ1              |    1 |       |    1   (0)|
|* 15 |       INDEX RANGE SCAN            | I_OBJ1              |    1 |     5 |    1   (0)|
|  16 |    INDEX FULL SCAN                | I_USER2             |   86 |   344 |    1   (0)|
|* 17 |   INDEX UNIQUE SCAN               | I_MON_MODS_ALL$_OBJ |    1 |     5 |    0   (0)|
--------------------------------------------------------------------------------------------

看来这个问题还隐藏的比较深,在metalink上还没有找到这个bug的描述,怀疑Oracle还没有发现这个bug的存在。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-663772/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11077171