承接上文導出階段,本文記錄在目標 Linux 伺服器上完成 DB2 資料庫遷移導入的完整操作流程:解壓縮、建立目標資料庫、執行 db2look 導出的 DDL 腳本、db2move LOAD 高效載入資料、SET INTEGRITY 啟用約束驗證、資料一致性核對,含實際命令輸出與錯誤處理示例。
[db2inst1@devsvr2 db2inst1]$ tar zxfv oatest0303.tar.gz
oatest0303/
oatest0303/oatest.sql
oatest0303/EXPORT.out
oatest0303/db2move.lst
oatest0303/tab1.msg
oatest0303/tab1.ixf
...
[db2inst1@devsvr2 db2inst1]$ db2 create db sample
DB20000I CREATE DATABASE 命令成功完成。
[db2inst1@devsvr2 db2inst1]$ cd oatest0303
[db2inst1@devsvr2 oatest0303]$ db2 -tvf oatest.sql
...
# 大量 DDL 執行輸出,確認無嚴重錯誤 (WARNING 可接受)
關鍵:-tvf 參數:-t 以分號為語句結束符、-v 回顯命令、-f 指定檔案。
[db2inst1@devsvr2 oatest0303]$ db2move sample load
...
* LOAD: table "OATEST"."UM_USER"
- Rows read: 1529
- Loaded: 1529
- Rejected: 0
- Deleted: 0
- Committed: 1529
Disconnecting from database ... successful!
End time: Sun Mar 5 10:24:22 2006
LOAD 優勢:不記日誌、繞過約束檢查、直接寫入數據頁,速度比 IMPORT 快數十倍。輸出顯示 Loaded = Read、Rejected = 0 表示載入成功。
LOAD 後表處於 SET INTEGRITY PENDING 狀態,必須手動啟用:
[db2inst1@devsvr2 oatest0303]$ db2 connect to sample
# 驗證資料
[db2inst1@devsvr2 oatest0303]$ db2 "select count(*) from oatest.um_user"
1
SQL0668N 由於表 "OATEST.UM_USER" 上的原因碼 "1",所以不允許操作。SQLSTATE=57016
# 原因碼 1 = Set Integrity Pending
# 啟用約束檢查
[db2inst1@devsvr2 oatest0303]$ db2 "set integrity for oatest.UM_USER immediate checked"
DB20000I SQL 命令成功完成。
# 再次驗證
[db2inst1@devsvr2 oatest0303]$ db2 "select count(*) from oatest.um_user"
1
1529
1 條記錄已選擇。
利用 SQL 生成所有表的 SET INTEGRITY 命令:
db2 "select 'set integrity for ' || rtrim(tabschema) || '.' || rtrim(tabname) || ' immediate checked;' from syscat.tables where tabschema = 'OATEST'" > set_integrity.sql
db2 -tvf set_integrity.sql
| 階段 | 關鍵動作 | 驗證點 |
|---|---|---|
| 解壓 | tar zxfv 保留目錄結構 | 含 .sql, .ixf, .msg, .lst, EXPORT.out |
| 建庫 | db2 create db 同名 | DB20000I 成功 |
| DDL 執行 | db2 -tvf ddl.sql | 無嚴重 SQL 錯誤;Bufferpool/Tablespace 已建 |
| 資料載入 | db2move load | Loaded=Read, Rejected=0, Committed=Read |
| 約束啟用 | SET INTEGRITY IMMEDIATE CHECKED | 表狀態從 PENDING 變為 NORMAL,查詢無錯誤 |
| 資料核對 | SELECT COUNT(*) 對比源端 | 筆數完全一致 |
db2 -tvf 會報錯。解決:將外鍵 DDL 獨立檔案,表建好後再執行 (見文章 225727)。db2move load -io 可忽略系統生成的身份欄位值,避免衝突。db2look -e 包含 GRANT 語句,DDL 執行時同步遷移權限。此流程已在多個 Linux→Linux 遷移專案驗證,核心心法:**DDL 先行、LOAD 极速、SET INTEGRITY 收尾、COUNT 核對**。