新博客http://www.cnblogs.com/zhjh256 欢迎访问
分类: Oracle
2008-01-06 21:46:48
DBA_OBJECTS中有两个列:OBJECT_ID和DATA_OBJECT_ID.
OBJECT_ID引用逻辑对象,如包,视图定义,表定义,简而言之,它们不是由组成分区的块组成。除了它们的定义消耗DD表的空间外,这些对象物理上本身不存在。
DATA_OBJECT_ID引用一个段,可能是表,索引,表/索引分区等等。由至少一个分区组成,如果多个表共享相同的段,DATA_OBJECT_ID也将共享。
当一个段执行某些DDL如(ALTER TABLE MOVE ... or TRUNCATE TABLE ...)时,DATA_OBJECT_ID将会发生改变因为将创建一个新的段。因为逻辑上段是没有变化的,因此OBJECT_ID保持不变。
因此在处理对象标识符时需要小心DATA_OBJECT_ID和OBJECT_ID。
因此,作为警告,当需要提供OBJECT ID时,一定要确定哪个OBJECT ID。
SQL> SELECT OBJECT_ID,DATA_OBJECT_ID FROM DBA_OBJECTS WHERE OBJECT_NAME='TEST_CARD';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
50188 50188
SQL> TRUNCATE TABLE TEST_CARD;
Table truncated
SQL> SELECT OBJECT_ID,DATA_OBJECT_ID FROM DBA_OBJECTS WHERE OBJECT_NAME='TEST_CARD';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
50188 50192