SYSCATSPACE, TEMPSPACE1, USERSPACE1 及自定義表空間名稱、PAGESIZE 必須完全一致,否則 DDL 執行失敗或導入效能極差。CREATE SCHEMA TB33 AUTHORIZATION DB2INST1)。DBADM 或 CREATETAB + 表空間 USE + IMPLICIT_SCHEMA。
-- 1. 連接目標庫
db2 connect to TB33_S
-- 2. 設定當前 Schema (關鍵!DDL 中無 Schema 前綴時生效)
db2 SET CURRENT SCHEMA TB33
-- 3. 執行 DDL 腳本
db2 -tvf TB33.sql
參數:-t 結束符、-v 回顯、-f 檔案輸入。
執行完成後,所有表、視圖、索引、約束、程序、觸發器、序列建立完畢 (無資料)。
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。
db2 -tvf import.txt
-- 生成 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 內建轉換 |