轉譯自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已經發生變化了。
數據庫