oracle中的rowid和資料行的結構

來源:互聯網
上載者:User

標籤:使用   檔案   資料   資料庫   伺服器   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系統中相鄰的資料行之間不需要任何空間。資料區塊中每一行在行目錄中都有一個槽,這個槽指向了資料行的起始地址。

 

  

  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.