转译自Aman Sharma的blog:
http://blog.aristadba.com/?tag=data_object_id
是否有1个东西叫 Data_object_id , 若是有的话,它是用来作什么的呢? 正巧,在 OTN论坛 也有人问这个问题。我当时并不清楚 Data_object_id 是什么,但它的确在视图 ALL_OBJECTS 里存在。 Hmmm..有趣,它究竟是什么。 ASK Tom 最如今那个论坛里回答了, 根据TOM所说:
object_id 是数据库里的对象的惟一标识--数据库中每1个对象都会被分配1个惟一的好号码做为区别的标志。
一样地,每1个数据库object都会link住1个 segment (数据段), 而 Data_object_id 就是分配给那个对应的 segment .
(译者住:上面那句不保证正确性,由于1个数据库对象是能够对应不一样表空间内多个 segment 的)
当那个 segment 发生了任何物理变更,都会令这个数值改变。 这两个ID的值在一开始是相等的,可是当对应 segment
发生变更时, Data_object_id 会改变。 这两个ID都是Oracle用来表示存放在数据字典的元数据(数据目录)。
看1个例子:
首先查看数据库版本
建立1张表
查看该表的 object_id 和 Data_object_id ,
注:表 tab$ 仲 OBJ# 存放的就是对象的 object_id , 而 dataobj# 存放的就是对象的 data_object_id .
截断这张表
再查看该表的 object_id 和 Data_object_id , ..(无变化,做者原文是变化了的,可能因为这张表原来就是空表的关系)
执行 alter table xxx move , 这个语句通常用来移动表到另1个表空间( move 后面要加表空间参数),或者用来整理碎片( 消除行移植和行连接) , 可是会致使索引失效,因此要重建索引。
alter index xxx rebuild online
再查看该表的 object_id 和 Data_object_id , 见到Data_obj_id已经发生变化了。
数据库