在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
本文深入解析了DBA_Objects视图中的object_id和data_object_id字段的区别与用途,通过实例展示了两者在对象存储段修改后的变化,并解释了这些变化的原因。
1381

被折叠的 条评论
为什么被折叠?



