自 8i 版起,Oracle 提供 MOVE 命令,常用於將表段從一個表空間移至另一個,或透過區塊層級的物理複製來降低高水位標記(HWM)。
ROWID 發現皆位於同一區塊(AAAABH)。DELETE 刪除部分列並 COMMIT,ROWID 保持不變。ALTER TABLE test1 MOVE,再查 ROWID,發現 BLOCK_ID 從 65 變為 73,區塊編號從 AAAABH 變為 AAAABM。證明 MOVE 會重新排列資料,導致 ROWID 改變。建立大表後大量刪除資料,HWM 仍維持高位。執行 ALTER TABLE MY_OBJECTS MOVE 後,HWM 從 423 降至 290,釋放大量空間。(show_space 為自訂程序)
ALTER TABLE t MOVE [ONLINE] [TABLESPACE ts_name] [STORAGE (...)] [PARALLEL n];
ALTER TABLE t MOVE TABLESPACE new_ts;ALTER TABLE t MOVE STORAGE (INITIAL 30K NEXT 50K);MOVE 導致 ROWID 改變,索引因依賴 ROWID 定位資料會標記為 UNUSABLE。需執行 ALTER INDEX idx_name REBUILD ONLINE 修復。
MOVE 期間表上加獨佔鎖(EXCLUSIVE LOCK),僅允許 SELECT 操作。若有未提交的 DML,MOVE 會報 ORA-00054。
執行 MOVE 降低 HWM 時,表空間需有至少 1 倍表大小的可用空間。若空間不足會報 ORA-01652,需先擴充資料檔案。