ORACLE:object_id vs data_object_id

本文深入解析了DBA_Objects视图中的OBJECT_ID和DATA_OBJECT_ID两个字段的含义及区别,通过示例展示了它们在数据库对象存储变化时的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在dba_objects视图中存在object_id和data_object_id两个字段,在多数情况下,两者是相同的,但是有时两者却又不同。这两个字段到底什么含义那?

首先,OBJECT_id字段代表数据库中的某对象的唯一性标识,具有主键特征,而DATA_OBJECT_ID则标识了该对象底层的数据存储段,具有外建特征。在初始情况下,两者相同,但是当我们对对象的底层存储段进行了根本性的修改后,两者可能会不一致,如move和truncate操作。

   

SQL> create table tab2(id number);

表已创建。

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

 OBJECT_ID DATA_OBJECT_ID
---------- --------------
     77166	    77166

SQL> alter table tab2 move;

表已更改。

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

 OBJECT_ID DATA_OBJECT_ID
---------- --------------
     77166	    77167

SQL> truncate table tab2;

表被截断。

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

 OBJECT_ID DATA_OBJECT_ID
---------- --------------
     77166	    77167

SQL> insert into tab2 values(2);

已创建 1 行。

SQL> commit;

提交完成。

SQL> truncate table tab2;

表被截断。

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

 OBJECT_ID DATA_OBJECT_ID
---------- --------------
     77166	    77168

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值