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

DB2 LOAD 實戰大全(三):從異常表到效能參數的深度解析

     編輯:DB2 教學

LOAD vs IMPORT:核心差異速覽

維度IMPORTLOAD
目標表預存自動建立必須存在
索引處理逐列維護階段式重建
約束檢查逐列即時載入階段跳過,刪除階段集中處理
日誌記錄完整記錄不記錄(不可前滾恢復)
效能慢(適合小量)快(大量載入首選)
資料來源僅檔案檔案/游標/管道/裝置

LOAD 四階段架構

  1. 載入階段:資料格式化為頁直接寫入、收集索引鍵排序、可設一致點(SAVECOUNT)支援斷點續傳。
  2. 建立階段:依收集的鍵值批次建立索引,失敗可從此階段重啟。
  3. 刪除階段:違反唯一/主鍵約束的列移至異常表(FOR EXCEPTION),訊息寫入訊息檔。
  4. 索引複製階段:若指定系統臨時表空間且用 READ ACCESS,索引從臨時空間複製回目標表空間。

四階段全部完成才算成功,任一失敗進入掛起狀態需人工干預。

實戰進階功能逐一示範

1. 遊標載入:跨表/跨庫高效遷移


DECLARE mycur CURSOR FOR SELECT * FROM org;
CREATE TABLE org2 LIKE org;
LOAD FROM mycur OF CURSOR INSERT INTO org2;

避免中間檔案落地,記憶體直傳,極適合同實例表複製。

2. 異常表機制:捕獲約束違規資料


CREATE TABLE staff1 LIKE staff;
INSERT INTO staff1 SELECT * FROM staff WHERE id <= 160;
CREATE UNIQUE INDEX idxstaff ON staff1(id);
CREATE TABLE staffexp LIKE staff1;
ALTER TABLE staffexp ADD COLUMN ts TIMESTAMP;  -- 必須:時間戳+可選CLOB(32K+)
EXPORT TO staff.txt OF DEL SELECT * FROM staff;
LOAD FROM staff.txt OF DEL INSERT INTO staff1 FOR EXCEPTION staffexp;

關鍵:異常表結構 = 目標表 + 時間戳欄位(必填) + CLOB 欄位(選填,存錯誤詳情)。預先建立,LOAD 不自動建表。

3. DUMP 檔:隔離格式錯誤列


LOAD FROM staff.txt OF DEL MODIFIED BY DUMPFILE=d:\dump 
  INSERT INTO staff1 FOR EXCEPTION staffexp;

區別:格式轉換失敗(如字串寫入 INT)進 DUMP;格式正確但違約束進異常表。

4. ROWCOUNT / WARNINGCOUNT:流程控制

  • ROWCOUNT 3:僅載入前 3 列,適合抽樣驗證。
  • WARNINGCOUNT 1:警告數超限即終止並進入「載入掛起」,強制資料零容忍。

5. NOROWWARNINGS:抑制警告輸出提速


LOAD FROM staff.txt OF DEL MODIFIED BY NOROWWARNINGS INSERT INTO staff1;

大量載入預期有警告時啟用,減少 I/O 開銷。

6. STATISTICS 選項:載入同步收集統計


-- 完整統計(含分佈與詳細索引)
LOAD ... REPLACE INTO staff1 STATISTICS YES WITH DISTRIBUTION AND DETAILED INDEXES ALL;
-- 僅基本統計
LOAD ... REPLACE INTO staff1 STATISTICS YES AND INDEXES ALL;

限制:僅支援 REPLACE 模式,不可與 INSERT 共用。統計結果需查系統表 SYSCAT.TABLES/COLUMNS/INDEXES 驗證。

7. SET INTEGRITY 解除檢查掛起


ALTER TABLE staff1 ADD CONSTRAINT chk CHECK (dept < 100);
LOAD ... INSERT INTO staff1;  -- 違約束資料導致檢查掛起
SET INTEGRITY FOR staff1 IMMEDIATE CHECKED FOR EXCEPTION IN exp_table;
-- 或快速跳過檢查(資料留存但不驗證)
SET INTEGRITY FOR staff1 IMMEDIATE UNCHECKED;

效能調優六大參數

參數適用場景效果
COPY YES/NO / NONRECOVERABLE歸檔日誌環境YES:備份並行不掛起;NO:預設,需事後備份;NONRECOVERABLE:最快但不可恢復
FASTPARSEDEL/ASC 確信正確資料跳過語法檢查,顯著提速
ANYORDERSMP 系統 + CPU_PARALLELISM > 1打亂輸入順序插入,提升平行度
DATA BUFFER大量載入指定 4KB 內部緩衝頁數,越大越快
CPU_PARALLELISMSMP 系統解析/轉換/格式化執行緒數
DISK_PARALLELISM多磁碟陣列寫入磁碟執行緒數

掛起狀態對應表

  • 載入掛起:載入階段錯 → RESTART(修正後續傳)/ TERMINATE(放棄)/ 重建表空間/從備份還原
  • 刪除掛起:刪除階段錯 → 僅能 TERMINATE 或重建
  • 備份掛起:COPY NO+歸檔日誌 → 做全庫/表空間備份即解除
  • 檢查掛起:FK/Check/摘要表約束 → SET INTEGRITY ... IMMEDIATE CHECKED/UNCHECKED

實戰秘技:大量刪除用 LOAD REPLACE


LOAD FROM /dev/null OF DEL REPLACE INTO target_table;

秒級清空大表並重置 HWM,比 DELETE/TRUNCATE 更快(注意觸發器不會觸發)。

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