今天在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/ ,如需转载,请注明出处,否则将追究法律责任。