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

Oracle 海量資料快速轉移雙絕技:建新表直載與 APPEND 直寫,繞過 Redo 與 Undo

     編輯:Oracle 資料庫基礎

遷移 80MB 以上海量資料至新表空間或新 Schema,傳統 INSERT 產生大量 Redo/Undo、緩衝區管理開銷極大。Oracle 8i+ 提供兩大直徑載入技巧:CTAS (CREATE TABLE AS SELECT) + 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 username.source_tablename WHERE 條件;

優點

  • 單一 DDL 完成建表+載入,最快
  • NOLOGGING 最小化 Redo(僅記錄元資料)
  • 繞過 Undo Segment、緩衝區、鎖機制

缺點與補救

遺失項目補救動作
索引事後 CREATE INDEX 重建
預設值事後 ALTER TABLE MODIFY DEFAULT ...
Check/Unique/FK 約束事後 ALTER TABLE ADD CONSTRAINT
Non-Null 約束自動繼承 ✓

技巧二:APPEND 直寫現有表

INSERT /*+ APPEND */ INTO target_tablename
SELECT * FROM username.source_tablename WHERE 條件;
COMMIT;

優點

  • 適用於既有表結構,保留索引、約束、權限
  • High Water Mark 直接推進,不掃描空閒區塊
  • NOLOGGING 表同樣最小化 Redo

嚴重警告:獨佔鎖 (Mode 6)

  • APPEND 會對目標表加 Mode 6 (Exclusive) 鎖
  • 期間所有 DML 封鎖排隊
  • 嚴禁在 OLTP 核心表上線時段執行

共同原理:直徑路徑載入

  • 不使用 SGA 資料緩衝區
  • 不產生 Undo(除非表有觸發器/約束需驗證)
  • 最小化 Redo(NOLOGGING 表)
  • 直接格式化資料區塊寫入資料檔,類同 SQL*Loader Direct Path
  • Oracle 8i 後所有版本支援

選擇決策樹

  1. 需保留既有表結構/索引/權限? → 是 → APPEND(離峰時段)
  2. 可接受重建索引/約束? → 是 → CTAS(最快)
  3. OLTP 核心表? → 僅限維護窗口,並評估鎖影響
  4. 資料量 > 10GB? → 考慮分區表 + 並行 PARALLEL + APPEND

結語

海量資料轉移核心 = 繞過緩衝區、繞過 Undo、最小化 Redo、鎖定 High Water Mark。CTAS 適合重建,APPEND 適合追加。務必在測試環境驗證鎖影響與索引重建時間,納入變更管理流程,方可上線。

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