ITPub博客

首页 > 数据库 > Oracle > OBJECT_ID和DATA_OBJECT_ID

OBJECT_ID和DATA_OBJECT_ID

原创 Oracle 作者:sunwgneuqsoft 时间:2007-12-10 15:27:03 0 删除 编辑

USER_OBJECTS数据字典里面有两个字段:OBJECT_IDDATA_OBJECT_ID

OBJECT_ID大家都比较熟悉,是每个数据对象的唯一标识。

DATA_OBJECT_ID可能就用的少一些了,这个字段是和SEG$对应的,用来标识该OBJECT的物理存储的段的位置。

[@more@]

只有表,索引,UNDO这些有实在存储的对象才会对应一个物理的SEGMENT,字段DATA_OBJECT_ID才会有数值。象索引,函数等仅仅存在OBJECT_ID,而没有DATA_OBJECT_ID

SQL> create table test as select * from dual;

Table created.

SQL> select object_id,data_object_id from user_objects where object_name='TEST';

689172 689172

SQL> create view v_test as select * from test;

View created.

SQL> select object_id,data_object_id from user_objects where object_name='V_TEST';

689173

SQL> create table test1 as select * from dual;

Table created.

SQL> select object_id,data_object_id from user_objects where object_name='TEST1';

689174 689174

大家可以看一下USER_OBJECTS数据字典里面,OBJECT_IDDATA_OBJECT_ID的关系,大部分对象这两个字段应该是相等的,而少部分对象的DATA_OBJECT_ID会比OBJECT_ID大。

是这样的,当我们新建一个对象的时候,OBJECT_IDDATA_OBJECT_ID两者应该相等,他们的值应该等于MAX(SELECT MAX(OBJECT_ID) FROM DBA_OBJECTS,SELECT MAX(HWMINCR) FROM SEG$) + 1

而当我们对对象进行特定的操作的时候DATA_OBJECT_ID就会变化。比如说TRUNCATEMOVE操作。

SQL> create table test as select rownum rn from user_objects where rownum<2;

Table created.

SQL> select object_id,data_object_id from user_objects where object_name='TEST';

689191 689191

SQL> truncate table test;

Table truncated.

SQL> select object_id,data_object_id from user_objects where object_name='TEST';

689191 689192

SQL> truncate table test;

Table truncated.

SQL> select object_id,data_object_id from user_objects where object_name='TEST';

689191 689192

从上面的例子猜想,TRUNCATE可能是在原来SEGMENT的位置上建立了一个新的SEGMENT,然后分配给原来的对象,这样就达到了清空了原来的对象中的内容。另一个比较有趣的地方是,当表中有数据和表中没有数据的两种情况下,ORACLE的处理方式并不一样。如果表中是没有数据的,那data_object_id是不会发生变化的。

前面说到了DATA_OBJECT_ID会比OBJECT_ID大,那么有没有DATA_OBJECT_IDOBJECT_ID的情况呢?

我猜想应该是有的,那就是在分区表的分区交换的操作下。

先写到这,关于分区表中的OBJECT_IDDATA_OBJECT_ID关系,下次接着写吧。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8394333/viewspace-991018/,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle的两个bug
请登录后发表评论 登录
全部评论
  • 博文量
    56
  • 访问量
    758465