Oracle 資料類型及儲存方式(六)

來源:互聯網
上載者:User

第六部分 ROWID
ROWID 就是資料庫中一行的地址,用於記錄資料存放區的一些屬性,包括:記錄儲存所在的資料檔案(file#),所屬的資料庫物件(obj#),所在的資料區塊號(block_no#),以及在表中的行號。這些屬性就構成了Oracle 的ROWID.
我們需要注意的是在資料表中並沒有一列來專門記錄ROWID。
另外還有一個UROWID,它用於表,是行主鍵的一個表示,基於主鍵產生.一般是索引組織表在使用。索引組織表是沒有ROWID的。
不管是ROWID還是UROWID,資料表都沒有專門的一列來記錄。
我們把這兩種類型稱為偽列。
SQL> create table test_rowid (id number(38));
Table created
SQL> insert into test_rowid values(1);
1 row inserted
SQL> select rowid, id from test_rowid;
ROWID                                                   ID
------------------ ---------------------------------------
AAAKsAAAEAAAAC+AAA                                       1
因為ROWID可以唯一的標識一條記錄,所以索引中儲存了ROWID值,通過索引訪問記錄,其實也就是通過從索引獲得ROWID,再根據ROWID定位元據表中的記錄。
但是當對錶進行分區移動之後,索引就需要重建,因為儲存位置已經發生了變化,索引中的ROWID已經不能再定位到新的資料了。
ORACLE 的ROWID一直在不斷變化。
在ORACLE 6中,ROWID使用6bit來表示檔案號。
在ORACLE 8,ROWID的組成是FFFF.BBBBBBBB.RRRR。佔用6個位元組。
10bit 的file#,22bit的block#,16bit的row #
在ORACLE 9中,Oracle 為ROWID引入了資料對象號的概念dataobj#.
現在ROWID格式變為OOOOOO.FFF.BBBBBB.RRR。最新的ROWID採用Base64編碼,一共有18位,代表80位位元,其中:O為資料對象號,F是檔案號,B是塊號,R是行號
32 bit dataobj#+10bit rfile#,+22 bit block# +16bit row#
在以前ROWID是保持不變的,但現在ROWID是會發生改變的。如:
把一行從一個分區移到另一個分區
使用閃回表(flashback table)命令將一個資料表恢複到以前的某個時間點
對分區進行操作,如:移動,分解和合并
對段進行收縮
這些操作都會使ROWID發生變化,所以我們不應該把ROWID來作為唯一標識。而是使用一個單獨的列為主鍵用來作資料行的唯一標識。另外主鍵約束可以實現參考完整性。而ROWID是無法做到的。
筆者曾經使用ROWID排序來實現按資料的寫入順序來顯示資料。這在大多數情況下是可以做的,但是如果以後因為維護資料庫,對分區進行操作後,這樣做是不可行的。
所以應該使用單獨的列來記錄資料的寫入順序。
ROWID類型的主要用途是與資料庫進行互動時,可以快速的指向某一行。比如使用ROWID更新某一行等。可以不通過索引而快速的找到某行記錄。並且可以很快的進行行資料的驗證。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.