Oracle 7 ROWID 僅含 FILE、BLOCK、ROW NUMBER,檔案號為絕對值。Oracle 8 引入表空間相對檔案號(Relative File Number),同一相對號可屬不同表空間,故須在 ROWID 中加入 Data Object Number(段標識)以唯一定位。
| 位置 | 長度 | 含義 |
|---|---|---|
| 1-6 | 6 | Data Object Number(段/分區標識) |
| 7-9 | 3 | Relative File Number(表空間相對檔案號) |
| 10-15 | 6 | Block Number(檔案內區塊號) |
| 16-18 | 3 | Slot Number(區塊內行槽位) |
內部儲存 10 位元組:(Data Object Number, Block Number, Row Number)。
OBJECT_ID = DATA_OBJECT_ID。TRUNCATE TABLE、MOVE PARTITION 後 DATA_OBJECT_ID 遞增。4B Block Number + 2B Row Number。| 場景 | 行為 |
|---|---|
| Oracle 8 查 Oracle 7 ROWID | 回傳 Oracle 7 格式,可用於 WHERE 條件 |
| Oracle 7 查 Oracle 8 ROWID | 回傳 Oracle 8 格式,可用於 WHERE,但不可存入 ROWID 欄位;需用 DBMS_ROWID 解析 |
| 含擴展 ROWID 的資料 IMP 到 Oracle 7 | 失敗 |
| Oracle 7 資料 IMP 到 Oracle 8 | 自動擴展 |
僅當應用自行組合/分解 ROWID 或 表含 ROWID 欄位 時需修改,改用 DBMS_ROWID 套件。單純傳遞/整體使用無影響。
ROWID_CREATE、ROWID_INFO、ROWID_TYPE、ROWID_OBJECTROWID_RELATIVE_FNO、ROWID_BLOCK_NUMBER、ROWID_TO_ABSOLUTE_FNOROWID_TO_EXTENDED:受限→擴展(舊→新)ROWID_TO_RESTRICTED:擴展→受限ROWID_VERIFY:檢查受限是否可轉擴展建立腳本:$ORACLE_HOME/rdbms/admin/dbmsutil.sql(含於 catproc.sql)。