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

DB2 匯入資料四大必守細節:預設值、效能、日誌、格式化

     編輯:DB2 教學

一、預設值 vs NULL 值的爭奪戰

  • **預設行為**:目標檔缺欄位值 → 寫入 `NULL`(無論該欄是否有 DEFAULT)。
  • **例外**:欄位有 `NOT NULL` 且無 DEFAULT → 匯入報錯。
  • **強制使用 DEFAULT**:加入 `USEDDEFAULTS` 選項。
    IMPORT FROM ... MODIFIED BY USEDDEFAULTS INSERT INTO ...
  • 建議:`NOT NULL` + `DEFAULT` 欄位務必加 `USEDDEFAULTS`,簡化來源檔準備。

二、大量匯入效能優化

  • **工具選擇**:大量資料首選 `LOAD`(不驗證約束、不寫日誌、不觸發 Trigger),小量/需驗證才用 `IMPORT`。
  • **遠端匯入加 `COMPOUND=n`**:
    IMPORT FROM ... MODIFIED BY COMPOUND=100 INSERT INTO ...
    批次打包傳送,客戶端讀檔與伺服器寫入並行,降低網路延遲影響。
  • **離峰時段**:排程於業務低峰執行,減少對線上負載衝擊。

三、活動日誌分批 Commit 避免爆滿

  • 每 `N` 列 `COMMIT` 一次,釋放日誌空間:
    IMPORT FROM ... COMMITCOUNT 500 INSERT INTO ...
  • 失敗時僅回滾最後一批,搭配 `RESTARTCOUNT` 續傳:
    IMPORT FROM ... RESTARTCOUNT 1500 COMMITCOUNT 500 INSERT INTO ...
    跳過前 1500 列(已 Commit 3 批),從第 1501 列繼續。
  • `COMMITCOUNT` 過大 → 日誌暴增;過小 → Commit 開銷大。經驗值:中等表 500~1000,大表 2000~5000。

四、格式化選項應對非標準檔案

綜合範例

IMPORT FROM /data/orders.csv OF DEL
  MODIFIED BY COLDEL; CHARDEL" DELPRIORITYCHAR DATEFORMAT="YYYYMMDD"
  USEDDEFAULTS COMMITCOUNT 1000
  INSERT INTO sales.orders;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
問題選項範例
欄位分隔符非逗號(如冒號、Tab)`COLDEL<字元>``MODIFIED BY COLDEL:`
字串定界符非雙引號`CHARDEL<字元>``MODIFIED BY CHARDEL'`
記錄跨行(換行符在欄位內)`DELPRIORITYCHAR`提升欄位分隔符優先級 > 記錄分隔符
日期/時間格式不符`DATEFORMAT`/`TIMEFORMAT`/`TIMESTAMPFORMAT``MODIFIED BY DATEFORMAT="YYYYMMDD"`