ITPub博客

首页 > IT职业 > IT职场 > dba_objects中的data_object_id列的含义

dba_objects中的data_object_id列的含义

IT职场 作者:东方友诚 时间:2015-03-23 18:10:47 0 删除 编辑

无意中,发现一些地方使用dba_objects中的data_object_id列。它是什么意思?

[@more@]

我第一次注意到这个列时,非常好奇,dba_objects已经有了object_id列来唯一标识一个对象,那么还要data_object_id列做什么?而在metalink上又没有找到dba_objects的解释。我执行如下查询:

SQL> select count(*) from dba_objects;

COUNT(*)
----------
29931


SQL> select count(*) from dba_objects where object_id <> data_object_id;

COUNT(*)
----------
121

发现在我的数据库中,又121个对象数据的object_id和data_object_id不一致。于是问人,曰在分区表的情况下,这两个字段不一致。可是我的数据库没有使用分区表。怎么回事呢?深究一下,得知:

表经过move/truncate之后,索引经过rebuild之后它们的object_id<>data_object_id

SQL> create table wwftest as select object_id, object_name, owner from all_objec
ts where rownum < 400;

表已创建。

SQL> create index ind_wwftest on wwftest(object_id);

索引已创建。
SQL> col object_name format a25
SQL> select object_name, object_id, data_object_id from dba_objects
2 where object_name like '%WWFTEST';

OBJECT_NAME OBJECT_ID DATA_OBJECT_ID
------------------------- ---------- --------------
IND_WWFTEST 33363 33363
WWFTEST 33362 33362

SQL> truncate table wwftest;

表已截掉。

SQL> select object_name, object_id, data_object_id from dba_objects
2 where object_name like '%WWFTEST';

OBJECT_NAME OBJECT_ID DATA_OBJECT_ID
------------------------- ---------- --------------
IND_WWFTEST 33363 33364
WWFTEST 33362 33365

SQL> alter table wwftest move;

表已更改。

SQL> select object_name, object_id, data_object_id from dba_objects
2 where object_name like '%WWFTEST';

OBJECT_NAME OBJECT_ID DATA_OBJECT_ID
------------------------- ---------- --------------
IND_WWFTEST 33363 33364
WWFTEST 33362 33366

SQL> alter index ind_wwftest rebuild;

索引已更改。

SQL> select object_name, object_id, data_object_id from dba_objects
2 where object_name like '%WWFTEST';

OBJECT_NAME OBJECT_ID DATA_OBJECT_ID
------------------------- ---------- --------------
IND_WWFTEST 33363 33367
WWFTEST 33362 33366

那么,data_object_id是用来做什么的呢?note 45888.1说的明白:

DATA_OBJECT_ID was introduced in 8.0 to track versions of the same segment (certain operations change the version). It is used to discover stale ROWIDs and stale undo records.

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

上一篇: substr与substrb区别
请登录后发表评论 登录
全部评论

注册时间:2014-11-24

  • 博文量
    144
  • 访问量
    336912