首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle MOVE 命令完整指南:跨表空間移動、降低 HWM、索引重建與注意事項

     編輯:Oracle 資料庫相關知識

自 8i 版起,Oracle 提供 MOVE 命令,常用於將表段從一個表空間移至另一個,或透過區塊層級的物理複製來降低高水位標記(HWM)。

實驗觀察:MOVE 如何改變 ROWID

  1. 建立測試表並插入 8 筆資料,查詢 ROWID 發現皆位於同一區塊(AAAABH)。
  2. 執行 DELETE 刪除部分列並 COMMIT,ROWID 保持不變。
  3. 執行 ALTER TABLE test1 MOVE,再查 ROWID,發現 BLOCK_ID 從 65 變為 73,區塊編號從 AAAABH 變為 AAAABM。證明 MOVE 會重新排列資料,導致 ROWID 改變。

MOVE 降低 HWM 實測

建立大表後大量刪除資料,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 重組區塊可消除遷移列。

關鍵注意事項

1. 索引必須 REBUILD

MOVE 導致 ROWID 改變,索引因依賴 ROWID 定位資料會標記為 UNUSABLE。需執行 ALTER INDEX idx_name REBUILD ONLINE 修復。

2. 獨佔鎖定

MOVE 期間表上加獨佔鎖(EXCLUSIVE LOCK),僅允許 SELECT 操作。若有未提交的 DML,MOVE 會報 ORA-00054。

3. 空間需求

執行 MOVE 降低 HWM 時,表空間需有至少 1 倍表大小的可用空間。若空間不足會報 ORA-01652,需先擴充資料檔案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved