object_id 是逻辑对象ID
data_object_id 是物理对象ID
SQL> create table test as select rownum rn from dba_objects;
Table created.
SQL> select object_id,data_object_id from dba_objects where object_name='TEST' AITPUB个人空间$p.S W@u5]N!L3IN
ND WNER='SYS';
OBJECT_ID DATA_OBJECT_IDITPUB个人空间mz/T(S$W
---------- --------------ITPUB个人空间.i5x
@rV
Gw
6680 6680
SQL> select header_file,header_block,blocks from dba_segments where segment_name
(MJL/D7Vp O;r0='TEST' and WNER='SYS';
HEADER_FILE HEADER_BLOCK BLOCKS
C|g@ _1fDrBM)T&u0----------- ------------ ----------
#|(i4p;GKp K0 1 42921 16
SQL> alter table test move;
Table altered.
SQL> select object_id,data_object_id from dba_objects where object_name='TEST' AITPUB个人空间c"Xc3q-h~
ND WNER='SYS';
OBJECT_ID DATA_OBJECT_ID
k(VQdBo.eH0---------- --------------ITPUB个人空间yY\5krOWoN%x
6680 6681
表经过move后,物理ID发生变化
SQL> select header_file,header_block,blocks from dba_segments where segment_nameITPUB个人空间iJQV3\Ejzh]5T
='TEST' and WNER='SYS';
HEADER_FILE HEADER_BLOCK BLOCKSITPUB个人空间.W5zR)gW4kt
----------- ------------ ----------ITPUB个人空间
hc8P` `&o;y{^;m
1 43105 16
SQL> truncate table test;
Table truncated.
SQL> select header_file,header_block,blocks from dba_segments where segment_name
i?;I0aQ5j];?#V@/w)b0='TEST' and WNER='SYS';
HEADER_FILE HEADER_BLOCK BLOCKSITPUB个人空间!I{$Q'FRjD
----------- ------------ ----------
&_s!D2^A%`;E0 1 43105 8
SQL> select object_id,data_object_id from dba_objects where object_name='TEST' A
'v,rZ.H
l!`y0ND WNER='SYS';
OBJECT_ID DATA_OBJECT_IDITPUB个人空间.L3Vo7_!z$K
---------- --------------ITPUB个人空间0kb7K7{5p6Qer
6680 6682
表经过truncate 后 物理ID也发生变化
SQL> alter table test add(n number);
Table altered.
SQL> select object_id,data_object_id from dba_objects where object_name='TEST' A
ikr7W;D
_Q&F\Z|0ND WNER='SYS';
OBJECT_ID DATA_OBJECT_IDITPUB个人空间5X@3G5TH7XE*MVBy
---------- --------------
TfO[/a\0 6680 6682
给表增加一个列,也没发生变化
所以总上所简述
只有当segment发生变化时data_object_id才发生变化
有时候我们根据rowid 算时得到的data_object_id会误以为就是object_id,因为要是没有发生segment变化时
两者值是相等的