| select object_id,owner, object_name, object_type,created from dba_objects where object_name = 'TEMP_JP'; OBJECT_ID OWNER OBJECT_NAME OBJECT_TYPE CREATED --------- ------ --------------- ------------------- --------- 220845 SCOTT TEMP_JP TABLE 30-MAR-08 |
这可能是Oracle数据库的一个漏洞。我们来查找一下在过去一小时内创建的对象:
| select object_id,owner,object_name,object_type,created from dba_objects where created > trunc(sysdate) -1/24; OBJECT_ID OWNER OBJECT_NAME OBJECT_TYPE CREATED --------- ------ --------------- ------------------- --------- 220846 SCOTT TEMP_JP_IDX INDEX 30-MAR-08 220845 SCOTT TEMP_JP TABLE 30-MAR-08 220847 SCOTT TEMP_ROWIDS_JP TABLE 30-MAR-08 select object_id, owner, object_name, object_type, created from dba_objects where object_id in (select max(object_id) from dba_objects); OBJECT_ID OWNER OBJECT_NAME OBJECT_TYPE CREATED --------- ------- ------------- ------------------- --------- 220847 SCOTT TEMP_ROWIDS_JP TABLE 30-MAR-08 |
用新的RowID来查询表temp_jp:
| select * from temp_jp where rowid = 'AAA16wAAMAAAC+MAAB'; COL1 COL2 ---------- -------------------- 3 SITA |
我们用新RowID能够从该表查询到数据。但是,从新RowID得到的objectid并不能检索到对象的详细信息。从这点看来,Oracle并没有使用从目前的RowID得到的objectid来检索该表的数据,而是使用fileid、blockid和行号来访问表数据。
那么让我们来看看执行完move命令后表temp_jp的索引状态。
| select index_name, status from dba_indexes where table_name='TEMP_JP'; INDEX_NAME STATUS ------------------------------ -------- TEMP_JP_IDX UNUSABLE set autot on exp select * from temp_jp where col1=3; COL1 COL2 ---------- -------------------- 3 SITA Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=2 Card=1 Bytes=25) 1 0 TABLE ACCESS (FULL) OF 'TEMP_JP' (TABLE) (Cost=2 Card=1 Bytes=25) |

