在dba_objects视图中存在object_id和data_object_id两个字段,在多数情况下,两者是相同的,但是有时两者却又不同。这两个字段到底什么含义那?
首先,OBJECT_id字段代表数据库中的某对象的唯一性标识,具有主键特征,而DATA_OBJECT_ID则标识了该对象底层的数据存储段,具有外建特征。在初始情况下,两者相同,但是当我们对对象的底层存储段进行了根本性的修改后,两者可能会不一致,如move和truncate操作。
SQL> create table tab2(id number);
表已创建。
SQL> select object_id,data_object_id from user_objects where object_name='TAB2';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
77166 77166
SQL> alter table tab2 move;
表已更改。
SQL> select object_id,data_object_id from user_objects where object_name='TAB2';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
77166 77167
SQL> truncate table tab2;
表被截断。
SQL> select object_id,data_object_id from user_objects where object_name='TAB2';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
77166 77167
SQL> insert into tab2 values(2);
已创建 1 行。
SQL> commit;
提交完成。
SQL> truncate table tab2;
表被截断。
SQL> select object_id,data_object_id from user_objects where object_name='TAB2';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
77166 77168