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

Oracle 海量資料跨表空間/用戶遷移:CTAS 與 APPEND 兩大高速通道實戰

     編輯:Oracle 資料庫基礎

前言

遷移 80MB+ 大表跨表空間或跨用戶,傳統 DROP/CREATE/INSERT 或 EXP/IMP 耗時過長。Oracle 8i+ 提供兩大「繞過緩衝區、繞過 Redo、直寫資料檔」的高速通道:CREATE TABLE ... AS SELECT (CTAS) NOLOGGING 與 INSERT /*+ APPEND */。本文詳細對比兩者語法、鎖行為、適用場景、索引/約束處理與最佳實務。

方案一:CTAS NOLOGGING (建表即遷移)

語法範例

CREATE TABLE target_tablename
  TABLESPACE target_tablespace_name
  NOLOGGING
  PCTFREE 10 PCTUSED 60
  STORAGE (INITIAL 5M NEXT 5M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0)
AS SELECT * FROM source_user.source_tablename WHERE condition;

關鍵特性

  • NOLOGGING:最小化 Redo 產生 (僅記錄資料字典變更)
  • 直寫資料檔:繞過 SGA 緩衝區、繞過 Rollback Segment
  • 速度極快:接近 OS 層面複製速度
  • 並行化:可加 PARALLEL n 多進程掃描/寫入

⚠️ 遺失物件 (需手動重建)

物件類型是否繼承處理方式
NOT NULL 約束✅ 是自動保留
Primary Key / Unique / FK / Check❌ 否遷移後 ALTER TABLE ADD CONSTRAINT
Indexes❌ 否遷移後 CREATE INDEX (可 NOLOGGING PARALLEL)
Default Values❌ 否遷移後 ALTER TABLE MODIFY DEFAULT
Triggers❌ 否遷移後重建
Grants/Privileges❌ 否遷移後重新授權

方案二:INSERT /*+ APPEND */ (目標表預存在)

語法範例

INSERT /*+ APPEND */ INTO target_tablename
SELECT * FROM source_user.source_tablename WHERE condition;

COMMIT;

關鍵特性

  • APPEND Hint:直接路徑插入,High Water Mark 以上寫入,繞過緩衝區
  • NOLOGGING 表:配合目標表 ALTER TABLE ... NOLOGGING 達到最小 Redo
  • 鎖行為:獨佔鎖 (Level 6 / X Mode) 鎖定整表

⚠️ 鎖衝突風險

  • 執行期間,其他 Session 對目標表的 DML (INSERT/UPDATE/DELETE) 將排隊等待
  • OLTP 核心表**嚴禁**直接使用,需維護窗口或採用分區交換
  • 若目標表為暫存/階層表,風險可控

兩方案對比選型指南

維度CTAS NOLOGGINGINSERT APPEND
目標表是否預存在否 (建立新表)是
索引/約束處理全手動重建保留現有,僅資料追加
鎖影響無 (新表無其他存取)獨佔表鎖,阻塞 DML
適用場景全量遷移、建立歷史表、資料搬遷增量追加、ETL 階層載入、分區維護
並行度控制PARALLEL n 子句ALTER SESSION ENABLE PARALLEL DML + Hint
統計資訊建立後需 DBMS_STATS載入後需 DBMS_STATS

最佳實務流程:大表跨表空間遷移 (停機窗口)

  1. 準備:目標表空間預留空間、確認備份可用
  2. CTAS 建立新表:
    CREATE TABLE new_schema.target_table
      TABLESPACE new_tbs NOLOGGING PARALLEL 8
    AS SELECT * FROM old_schema.source_table;
  3. 重建索引:
    CREATE INDEX idx_col ON new_schema.target_table(col) TABLESPACE idx_tbs NOLOGGING PARALLEL 8;
  4. 重建約束/授權/觸發器
  5. 驗證筆數/校驗和**
  6. 切換:重命名舊表、新表改名、同義詞/視圖切換、重新授權
  7. 收集統計資訊**
  8. 清理舊表**

零停機遷移進階方案 (補充)

  • Oracle GoldenGate / Streams:即時同步,切換無停機
  • DBMS_REDEFINITION:線上重定義,支援索引/約束同步建立
  • 分區交換:ALTER TABLE EXCHANGE PARTITION 秒級切換
  • Flashback Table / Archive:輔助回滾保護

結語

CTAS NOLOGGING 與 INSERT APPEND 是 Oracle 大量資料移動的雙引擎。選型鐵律:全量新建用 CTAS,增量追加用 APPEND,OLTP 核心表嚴禁 APPEND 直衝。記住三個「繞過」:繞過 SGA、繞過 Redo、繞過 Rollback,才是速度來源。遷移不僅是資料搬運,更是索引、約束、授權、統計、同義詞的系統工程。建立標準化遷移腳本模板、驗證清單、回滾預案,方能在維護窗口從容完成 TB 級大表搬遷。

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