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

DB2 在線導入實戰:結構導入、數據並行導入、Schema 與表空間一致性檢查

     編輯:DB2 教學

前置關鍵檢查 (必做)

  1. 表空間名稱與頁面大小一致**:源庫目標庫 SYSCATSPACE, TEMPSPACE1, USERSPACE1 及自定義表空間名稱、PAGESIZE 必須完全一致,否則 DDL 執行失敗或導入效能極差。
  2. Schema 一致性**:目標庫需預建相同 Schema (CREATE SCHEMA TB33 AUTHORIZATION DB2INST1)。
  3. 權限**:導入用戶需 DBADM 或 CREATETAB + 表空間 USE + IMPLICIT_SCHEMA。

步驟一:結構導入 (db2look 產出的 DDL)


-- 1. 連接目標庫
db2 connect to TB33_S

-- 2. 設定當前 Schema (關鍵!DDL 中無 Schema 前綴時生效)
db2 SET CURRENT SCHEMA TB33

-- 3. 執行 DDL 腳本
db2 -tvf TB33.sql

參數:-t 結束符、-v 回顯、-f 檔案輸入。

執行完成後,所有表、視圖、索引、約束、程序、觸發器、序列建立完畢 (無資料)。

步驟二:數據導入 — 並行腳本生成與執行

1. 生成導入腳本


SELECT 'IMPORT FROM H:\DB2\TB33\' || RTRIM(TABNAME) || '.IXF OF IXF INSERT INTO ' || RTRIM(TABNAME) || ';'
FROM SYSCAT.TABLES
WHERE TABSCHEMA = 'TB33' AND TYPE = 'T';
  • 產生 IMPORT ... INSERT INTO 指令 (資料追加模式)。
  • 若表已有資料需覆蓋,用 REPLACE INTO (需 DELETE 權限、觸發器觸發、較慢) 或 REPLACE_CREATE (重建表)。
  • 輸出檔 import.txt。

2. 批次執行導入


db2 -tvf import.txt

3. 大表優化:用 LOAD 替代 IMPORT


-- 生成 LOAD 腳本 (非恢復模式最快)
SELECT 'LOAD FROM H:\DB2\TB33\' || RTRIM(TABNAME) || '.IXF OF IXF REPLACE INTO ' || RTRIM(TABNAME) || ' NONRECOVERABLE;'
FROM SYSCAT.TABLES WHERE TABSCHEMA='TB33' AND TYPE='T' AND CARD > 1000000;

-- 執行後必須 SET INTEGRITY
db2 "SET INTEGRITY FOR TB33.T1, TB33.T2 ... IMMEDIATE CHECKED"
  • NONRECOVERABLE:不記日誌,速度極快,**但備份失效**,Load 後必須立即做**完全備份**。
  • SET INTEGRITY:驗證約束、重建索引、刷新 MQT、使表可用。

驗證導入結果


-- 筆數核對
SELECT TABNAME, CARD FROM SYSCAT.TABLES WHERE TABSCHEMA='TB33' AND TYPE='T';

-- 抽樣業務查詢
SELECT COUNT(*) FROM TB33.KEY_TABLE;
SELECT * FROM TB33.KEY_TABLE FETCH FIRST 10 ROWS ONLY;

常見問題與解決

問題原因解決
SQL0104N 語法錯誤DDL 中含特定版本語法 (如 PARTITION BY) 目標版本不支援手動修改 DDL 移除不支援子句
SQL0204N 表未定義Schema 不匹配,SET CURRENT SCHEMA 遺漏執行前確認 SET CURRENT SCHEMA
IMPORT 速度極慢大表用 INSERT、索引/觸發器/RI 開銷大改用 LOAD NONRECOVERABLE + 事後備份
LOAD 後表不可用 (Set Integrity Pending)未執行 SET INTEGRITY執行 SET INTEGRITY ... IMMEDIATE CHECKED
Codepage 轉換錯誤/亂碼源目標 Codepage 不同 (如 ISO8859-1 vs UTF-8)導出時指定 CODEPAGE、或用 IXF 內建轉換
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved