Data Object ID + Relative File# + Block# + Row#,固定 10 位元組(Extended 格式)。
CREATE TABLE test_index (id NUMBER PRIMARY KEY, name VARCHAR2(20)) ORGANIZATION INDEX;
INSERT INTO test_index VALUES (1, 'a');
COMMIT;
SELECT rowid, DUMP(rowid) dump_rowid FROM test_index;
結果:
ROWID: *BAFAB4wCwQL+ DUMP: Typ=208 Len=10: 2,4,1,64,7,140,2,193,2,254
| 位置 | 值 | 含義 |
|---|---|---|
| 1 | 2 | **起始標記**(固定) |
| 2 | 4 | **版本/類型標記**(固定) |
| 3 | 1 | 相對檔案號 × 64 高位(此處 1×64=64) |
| 4 | 64 | 相對檔案號 × 64 低位 → 檔案號 = (1×256+64)/64 = 5 |
| 5 | 7 | 區塊號高位 |
| 6 | 140 | 區塊號低位 → Block = 7×256+140 = 1932 |
| 7 | 2 | **主鍵欄位 1 長度**(2 位元組) |
| 8 | 193 | 主鍵值位元組 1 (NUMBER 內部編碼:193,2 = 值 1) |
| 9 | 2 | 主鍵值位元組 2 |
| 10 | 254 | **結束標記**(固定) |
ALTER SYSTEM DUMP DATAFILE 5 BLOCK 1932;
Trace 檔中 Leaf Block 顯示:
row#0[8026] flag: K----, lock: 2 col 0; len 2; (2): c1 02 -- NUMBER 內部碼對應值 1 tl: 5 fb: --H-FL-- lb: 0x0 cc: 1 col 0: [1] -- name 欄值 'a'**完美對應**:邏輯 ROWID 第 3-6 位元組確實指向該區塊。
IOT 中資料依主鍵順序儲存,**INSERT/UPDATE/DELETE 會導致資料移動**,Physical Guess(檔案/區塊)可能失效。
**存取流程**:
這就是文件提到的 physical guess 機制。
CREATE TABLE test_index2 (
id CHAR(4), dt DATE,
CONSTRAINT pk_test_index2 PRIMARY KEY (id, dt)
) ORGANIZATION INDEX;
INSERT INTO test_index2 VALUES ('1', SYSDATE);
COMMIT;
DUMP:
Typ=208 Len=20: 2,4,1,64,7,148, 4,49,32,32,32, -- id='1' + 3 spaces (CHAR(4) 固定長度) 7,120,104,12,23,1,35,19, -- DATE 7 位元組內部格式 254
80 80,3800 → 8E D8。邏輯 ROWID 結構 = **固定頭 (2,4) + Physical Guess (檔案/區塊) + 主鍵欄位序列 (長度+值...) + 固定尾 (254)**。Physical Guess 提供快速路徑,失效時回退索引掃描,保證正確性。理解此格式有助於分析 IOT 存取路徑、偵錯 ORA-01410 失效 ROWID、優化大主鍵 IOT 設計。