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

DB2 資料匯入 (IMPORT) 四大關鍵注意事項與最佳實務

     編輯:DB2 教學

背景

上線前大量資料匯入是常態作業。IMPORT 指令透過 INSERT 逐筆寫入,靈活但效能較 LOAD 低。掌握四大關鍵點,可大幅降低失敗風險與效能衝擊。

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

預設行為

  • 目標檔缺欄位值 → **一律寫入 NULL** (無論該欄是否有 DEFAULT)
  • 欄位有 NOT NULL 限制 → 匯入失敗 (拋錯)

強制使用 DEFAULT:USEDDEFAULTS 選項

IMPORT FROM data.ixf OF IXF USEDDEFAULTS INSERT INTO target_table
  • 檔案無值 → 用 DEFAULT
  • 檔案有值 → 用檔案值
  • 建議: NOT NULL + DEFAULT 欄位務必加 USEDDEFAULTS

二、大量匯入的效能考量

工具選擇

工具機制效能適用
IMPORTSQL INSERT 逐筆、記錄日誌、觸發觸發器/約束較慢小量、需觸發邏輯、線上業務並行
LOAD繞過 SQL 層直接寫頁面、最小日誌、不觸發觸發器**極快**大量初始載入、維護窗口、可接受表鎖定

客戶端匯入優化:COMPOUND=N

IMPORT FROM data.del OF DEL MODIFIED BY COMPOUND=100 INSERT INTO target_table
  • 每 100 筆打包一個網路封包送 Server
  • Client 讀檔 / Server 寫入 **流水線並行**
  • 減少網路往返、提升吞吐

時機選擇: 低峰時段、維護窗口

三、讓作用日誌分次提交:COMMITCOUNT N

問題

大量 INSERT 佔用作用日誌空間 → 日誌滿 → 匯入失敗、回滾耗時。

解法

IMPORT ... COMMITCOUNT 500 INSERT INTO target_table
  • 每 500 筆提交一次,釋放日誌空間
  • 失敗時僅回滾最後一批,損失可控
  • 配合 RESTARTCOUNT 斷點續傳:
# 失敗後,從第 10001 筆繼續 (前 10000 已提交)
IMPORT ... RESTARTCOUNT 10000 COMMITCOUNT 500 INSERT INTO target_table

N 值建議

  • 一般:500~1000
  • 超大量:視日誌空間調整,避免過小頻繁提交拖慢效能

四、格式化選項 (MODIFIED BY) 處理非標準檔案

常用修飾符

COLDEL: / COLDEL0x09CHARDEL'DATEFORMAT"YYYYMMDD"讓欄位分隔優先於換行
需求修飾符範例
欄位分隔非逗號 (如冒號、Tab)COLDELx
字串分隔符非雙引號CHARDELx
日期/時間格式自訂DATESISO / TIMESISO 等
一筆資料跨多行 (避免被誤判多筆)DELPRIORITYCHAR

範例:冒號分隔、單引號包字串、跨行記錄

IMPORT FROM data.txt OF DEL 
MODIFIED BY COLDEL: CHARDEL' DELPRIORITYCHAR
INSERT INTO target_table

總結檢核表

  • ☐ NOT NULL + DEFAULT 欄位是否加 USEDDEFAULTS?
  • ☐ 大量資料是否改用 LOAD 或加 COMPOUND?
  • ☐ 是否設定 COMMITCOUNT + 準備 RESTARTCOUNT 續傳腳本?
  • ☐ 檔案格式是否標準?非標準是否加 MODIFIED BY?
  • ☐ 匯入前是否備份 / 快照? 匯入後是否 RUNSTATS?
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved