對DBMS而言,如果是透過Index搜尋資料,當在Index的B-Tree中找到符合的資料時,最後都會透過該索引給予的指標,去得知實際
的Data Page(Data Block)的位置。該指標在SQL Server或Sybase ASE都是稱做RID(Row Identify),而Oracle稱做ROWID(Row Identify)。
 
(1)SQL Server
   RID ==> 檔案編號、分頁編號、在該分頁裡的資料列編號
(2)Sybase
   RID ==> 檔案編號、分頁編號、在該分頁裡的資料列編號
(3)Oracle
   範例: OOOOOOFFFBBBBBBRRR
         [ROWID Format]
         OOOOOO ===> Data object number
         FFF ======> Relative file number
         BBBBBB ===> Block number
         RRR ======> Row number(或稱為Slot number)
 
 
======================================
Oracle的RowID結構
======================================
//1、為什使用ROWID
ORACLE把ROWID作為B-樹和其內部演算法標示ROW的唯一標示。
在ORACLE8以前的版本中,ROWID標示FILE、BLOCK、ROW NUMBER,只用一個數字代
表FILE號。
在ORACLE8中,一個DATAFILE有兩個數字代表:
一個絕對值,是整個數據庫唯一的。可以看DBA_DATA_FILES中的FILE_ID。
一個相對值,在TABLESPACE中是唯一的,可以看DBA_DATA_FILES中的RELATIVE_
FNO。
新的ROWID使用相對值,所以必須存放SEGMENT的標示,否則就會混淆。所以ORAC
LE8在ROWID中加入對象的SEGMENT號,用來標示TABLE或者PARTITION。
 
//2、ROWID的結構
使用base-64代碼,包括a-z,A-Z,0-9,+,-。一共18位。
1-6位:代表OBJECT
7-9位:文件相對值
10-15:文件中的BLOCK
16-18:BLOCK中的SLOT值
 
//3、TABLESPACE-Relative尋址方式
使用的是TABLESPACE-Relative尋址方式,多個檔可以有相同的相對值,因為它
們屬不同的TABLESPACE,所以不能從新的ROWID得到絕對位址,但是這沒有問題
,因為當要處理某個OBJECT時,已經能確定它屬哪個TABLESAPCE了。在TABLES
PACE中,檔相對值是唯一的,所以ROWID還是可以唯一標示一個OBJECT。TABLE
SPACE-Relative尋址方式是ORACLE8中支援超大數據庫的關鍵技術。
 
//4、DATA OBJECT NUMBER
DATA OBJECT NUMBER用指示SEGMENT,所有SEGMENT都有DATA OBJECT NUMBER,
存放在每個DATA BLOCK中,而且不重復。
arrow
arrow
    全站熱搜

    香 香蕉皮 發表在 痞客邦 留言(0) 人氣()