重庆思庄Oracle、Redhat认证学习论坛

标题: object_id 与 Data_Object_ID 的区别 [打印本页]

作者: 郑全    时间: 2021-12-17 13:03
标题: object_id 与 Data_Object_ID 的区别
是否有1个东西叫Data_object_id, 如果有的话,它是用来做什么的呢? 正巧,在也有人问这个问题。我当时并不清楚Data_object_id 是什么,但它的确在视图ALL_OBJECTS里存在。 Hmmm..有趣,它到底是什么。最现在那个论坛里回答了, 根据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个例子:
首先查看数据库版本
SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production






创建1张表


查看该表的object_idData_object_id,
注:表tab$OBJ# 存放的就是对象的object_id, 而 dataobj#存放的就是对象的data_object_id.
SQL> select obj#,dataobj#,tab# from tab$ where obj# in
  2     (select object_id from user_objects where object_name='TMP_JASON1');

      OBJ#   DATAOBJ#       TAB#
---------- ---------- ----------
     87416      87416

截断这张表


SQL> truncate table tmp_jason1;


Table truncated.


再查看该表的object_idData_object_id, ..(无变化,作者原文是变化了的,可能由于这张表原来就是空表的关系)
SQL> select obj#,dataobj#,tab# from tab$ where obj# in
  2     (select object_id from user_objects where object_name='TMP_JASON1');

      OBJ#   DATAOBJ#       TAB#
---------- ---------- ----------
     87416      87416

执行alter table xxx move, 这个语句一般用来移动表到另1个表空间(move 后面要加表空间参数),或者用来整理碎片(消除行移植和行链接), 但是会导致索引失效,所以要重建索引。
alter index xxx rebuild online



SQL> alter table tmp_jason1 move;


Table altered.

再查看该表的object_idData_object_id, 见到Data_obj_id已经发生变化了。
SQL> select obj#,dataobj#,tab# from tab$ where obj# in
  2     (select object_id from user_objects where object_name='TMP_JASON1');

      OBJ#   DATAOBJ#       TAB#
---------- ---------- ----------
     87416      87417










欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2