標籤:使用 檔案 資料 資料庫 伺服器 oracle table 對象
在oracle資料庫系統中每一行都有一個rowid,oracle資料庫系統就是利用rowid來定位元據行的。rowid也是oracle中內建的一個純量資料型別
rowid有一下特點;
是資料庫中每一行的唯一標識
並不是顯示的儲存某一列的值
可以用來定位行,雖然沒有直接給出行的物理地址
提供了訪問一張表中資料行的最快機制
1)rowid有兩種類型:限制rowid和擴充rowid
一、擴充rowid
擴充rowid是oracle8i之後的版本中引入的,其結構如下:
資料對象號+相對檔案號+塊號+行號
儲存(32bit) (10bit)(22bit)(16bit)=10B
顯示 6 3 6 3
一個擴充rowid需要10B的空間儲存用18個字元顯示其組成如下
1、資料對象號:唯一標識資料庫物件的資料對象號,被賦予每一個對象
2、相對檔案號:對同一個資料表空間中每一個檔案都是唯一的,標識同一個資料表空間中的不同資料檔案
3、塊號:為相對檔案中包含資料行的資料區塊的位置
4、行號:標識了塊頭中行目錄的位置
擴充rowid的顯示是用一中64位的編碼,使用的顯示字元為A~Z a~z 0~9和+、/總共64個字元
oracle使用rowid定位元據行的機制:
1、使用資料對象號找到資料表空間
2、使用相對檔案號找到儲存的資料檔案
3、使用塊號找到儲存資料行的資料區塊
4、使用行號找到行目錄項,然後使用行目錄項就可以定位元據行的起始地址
二、限制rowid
是oracle7或者之前的版本中使用的與擴充rowid的最大區別是沒有資料對象號在內部儲存時僅使用6個位元組儲存。在oracle中定位元據行時通過遍曆資料表空間依次向下尋找直到行號。所以在oracle7i版本之前要求資料檔案的個數最多為1022個。在8i後由於添加了資料對象號所以要求tablespace最多不能超過1022個。
2)oracle資料行的結構
為了節省儲存空間oracle使用了一種特殊的資料行儲存結構。每個資料行以變長記錄的形式儲存在資料區塊中。通常一行中的列是按照他們被定義的順序存放的,並且末尾的空列不儲存,但是非末尾的空列需要一個位元組的儲存長度。
資料行的組成:
行頭:用來儲存該行中的列數,遷移資訊和行鎖的狀態
行資料:由一系列的列長和列值組成對應資料行中的每一列oracle伺服器儲存該列的列長度和列的實際值
列長:一般需要一個位元組
列值:列的實際值緊隨著列長位元組後存放
oracle的儲存是非常緊湊的,在oracle系統中相鄰的資料行之間不需要任何空間。資料區塊中每一行在行目錄中都有一個槽,這個槽指向了資料行的起始地址。