object_id與data_object_id的關係

paulyibinyi發表於2008-01-07

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' A
ND WNER='SYS';

 OBJECT_ID DATA_OBJECT_ID
---------- --------------
      6680           6680

SQL> select header_file,header_block,blocks from dba_segments where segment_name
='TEST' and WNER='SYS';

HEADER_FILE HEADER_BLOCK     BLOCKS
----------- ------------ ----------
          1        42921         16

SQL> alter table test move;

Table altered.

SQL> select object_id,data_object_id from dba_objects where object_name='TEST' A
ND WNER='SYS';

 OBJECT_ID DATA_OBJECT_ID
---------- --------------
      6680           6681

表經過move後,物理ID發生變化

SQL> select header_file,header_block,blocks from dba_segments where segment_name
='TEST' and WNER='SYS';

HEADER_FILE HEADER_BLOCK     BLOCKS
----------- ------------ ----------
          1        43105         16

SQL> truncate table test;

Table truncated.

SQL> select header_file,header_block,blocks from dba_segments where segment_name
='TEST' and WNER='SYS';

HEADER_FILE HEADER_BLOCK     BLOCKS
----------- ------------ ----------
          1        43105          8

SQL> select object_id,data_object_id from dba_objects where object_name='TEST' A
ND WNER='SYS';

 OBJECT_ID DATA_OBJECT_ID
---------- --------------
      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
ND WNER='SYS';

 OBJECT_ID DATA_OBJECT_ID
---------- --------------
      6680           6682

給表增加一個列,也沒發生變化

所以總上所簡述

只有當segment發生變化時data_object_id才發生變化

有時候我們根據rowid 算時得到的data_object_id會誤以為就是object_id,因為要是沒有發生segment變化時

兩者值是相等的

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-112262/,如需轉載,請註明出處,否則將追究法律責任。

相關文章