Oracle 中 Object_iD 和 Data_Object_ID 的區別

Oracle 中 Object_iD 和 Data_Object_ID 的區別


 




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



 數據庫

相關文章
相關標籤/搜索