OBJECT_ID和DATA_OBJECT_ID

在USER_OBJECTS数据字典里面有两个字段:OBJECT_ID和DATA_OBJECT_ID。
OBJECT_ID大家都比较熟悉,是每个数据对象的唯一标识。
DATA_OBJECT_ID可能就用的少一些了,这个字段是和SEG$对应的,用来标识该OBJECT的物理存储的段的位置。
只有表,索引,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_ID和DATA_OBJECT_ID的关系,大部分对象这两个字段应该是相等的,而少部分对象的DATA_OBJECT_ID会比OBJECT_ID大。
是这样的,当我们新建一个对象的时候,OBJECT_ID和DATA_OBJECT_ID两者应该相等,他们的值应该等于MAX(SELECT MAX(OBJECT_ID) FROM DBA_OBJECTS,SELECT MAX(HWMINCR) FROM SEG$) + 1。
而当我们对对象进行特定的操作的时候DATA_OBJECT_ID就会变化。比如说TRUNCATE,MOVE操作。
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_ID比OBJECT_ID的情况呢?
我猜想应该是有的,那就是在分区表的分区交换的操作下。
先写到这,关于分区表中的OBJECT_ID和DATA_OBJECT_ID关系,下次接着写吧。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值