ORACLE ROWID
物理 rowid[physical rowid]:用于存儲常規(guī)表,聚簇表,表分區(qū)及子分區(qū),索引,索引分區(qū)及子分區(qū)數(shù)據(jù)行的地址。
邏輯 rowid[logical rowid]:用于存儲索引組織表數(shù)據(jù)行的地址。
物理 rowid 數(shù)據(jù)類型有兩種格式:
擴展 rowid[extended rowid]:格式支持與表空間相關的數(shù)據(jù)塊地址,能夠高效地定位分區(qū)表及分區(qū)索引中的數(shù)據(jù)行,同樣也能用于對非分區(qū)表及非分區(qū)索引進行高效地檢索。在 Oracle8i(或更高版本)數(shù)據(jù)庫中創(chuàng)建的表及索引均使用擴展 rowid。
受限 rowid[restricted rowid]:格式的作用是為 Oracle 7 或更早版本的數(shù)據(jù)庫應用程序提供向后兼容能力。
擴展 rowid [數(shù)據(jù)對象編號+文件+塊+行] (80 bit 位)
使用 64 進制對每個數(shù)據(jù)行的物理地址進行編碼。編碼字符為 A-Z,a-z,0-9,+,和 /。
擴展 rowid 的格式可分為 4 段,OOOOOOFFFBBBBBBRRR
OOOOOO:數(shù)據(jù)對象編號[data object number]用于確定數(shù)據(jù)庫的段。位于相同數(shù)據(jù)段中的方案對象具有相同的數(shù)據(jù)對象編號。
FFF:與表空間相關的數(shù)據(jù)文件編號[datafile number],代表包含此行的數(shù)據(jù)文件。
BBBBBB:包含數(shù)據(jù)行的數(shù)據(jù)塊[data block]。數(shù)據(jù)塊編號與其所在的數(shù)據(jù)文件相關,而非與表空間相關。因此兩個具備相同數(shù)據(jù)塊編號的數(shù)據(jù)行可能存在于同一個表空間的不同數(shù)據(jù)文件中。
RRR: 數(shù)據(jù)塊中的數(shù)據(jù)行。
可以使用 DBMS_ROWID 包通過擴展 rowid 獲取數(shù)據(jù)庫對象信息,在擴展格式及受限格式間轉(zhuǎn)換 rowid。
受限 rowid [塊+行+文件](48 bit 位)
塊:含數(shù)據(jù)行的數(shù)據(jù)塊[data block](示例中為 DD5)。數(shù)據(jù)塊編號與其所在的數(shù)據(jù)文件相關,而非與表空間相關。因此兩個具備相同數(shù)據(jù)塊編號的數(shù)據(jù)行可能存在于同一個表空間的不同數(shù)據(jù)文件中。
行:數(shù)據(jù)行[row]在數(shù)據(jù)塊中的位置(示例中各行分別為 0,1,2)。數(shù)據(jù)塊內(nèi)的行號總是從 0 開始。
數(shù)據(jù)文件:數(shù)據(jù)行所在的數(shù)據(jù)文件[datafile](示例中的文件號為 1)。數(shù)據(jù)庫內(nèi)的數(shù)據(jù)文件編號總是從 1 開始,數(shù)據(jù)文件編號在一個數(shù)據(jù)庫內(nèi)唯一。
使用 rowid
訪問特定數(shù)據(jù)行的最快的方法。
了解數(shù)據(jù)表是如何組織的。
rowid 是數(shù)據(jù)表內(nèi)各數(shù)據(jù)行的唯一標識。