首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Row Movement 影響深度解析:Flashback Table、Shrink、Partition Key 更新三大場景

     編輯:Oracle 資料庫基礎

Row Movement 概念

8i 引入,預設關閉。啟用後允許行在塊/分區間移動,導致 ROWID 變更。僅三大功能強制要求啟用:

  1. FLASHBACK TABLE
  2. SHRINK SPACE
  3. 更新分區鍵導致跨分區移動

場景一:Flashback Table

ALTER TABLE test_move ENABLE ROW MOVEMENT;
FLASHBACK TABLE test_move TO TIMESTAMP(SYSTIMESTAMP - INTERVAL '3' MINUTE);
-- 所有行 ROWID 全部改變(內部執行 DELETE + INSERT)

影響:僅發生於誤操作恢復,頻率極低,應用依賴 ROWID 的極少,影響可忽略。

場景二:Shrink Segment

ALTER TABLE test_move ENABLE ROW MOVEMENT;
ALTER TABLE test_move SHRINK SPACE;
-- ROWID 變更(底層函數重組,非 SQL)

影響:維護窗口操作,可離線執行,影響可控。

場景三:更新 Partition Key(核心線上影響)

UPDATE test_move SET owner='SYS' WHERE owner='DEMO' AND table_name='T_TEST';
-- 內部分解為:DELETE 舊分區 → INSERT 新分區 → UPDATE
-- 產生額外 Redo/Undo、Local Index 雙分區維護

量化分析建議:

  • 統計 Partition Key 更新頻率(如 DBA_TAB_MODIFICATIONS)。
  • 等負載壓測對比:分區表 vs 非分區表的 UPDATE 耗時、Wait 事件(enq: TX - row lock contention、log file sync)。
  • 綜合評估:查詢效能提升(分區裁剪) vs 更新開銷增加,取捨。

常見誤區澄清

  • Row Movement 不影響 Row Migration(行遷移)產生的 ROWID 變更。
  • Row Movement 與 Domain Index 互斥:含 Domain Index 表無法啟用 Row Movement,反之亦然。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved