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

Linux 平台下 DB2 資料庫遷移導入實戰 (1):解壓、建庫、執行 DDL、db2move LOAD 載入與 SET INTEGRITY 約束啟用全流程

     編輯:DB2 教學

承接上文導出階段,本文記錄在目標 Linux 伺服器上完成 DB2 資料庫遷移導入的完整操作流程:解壓縮、建立目標資料庫、執行 db2look 導出的 DDL 腳本、db2move LOAD 高效載入資料、SET INTEGRITY 啟用約束驗證、資料一致性核對,含實際命令輸出與錯誤處理示例。

導入步驟詳解

1. 解壓縮導出套件

[db2inst1@devsvr2 db2inst1]$ tar zxfv oatest0303.tar.gz
oatest0303/
oatest0303/oatest.sql
oatest0303/EXPORT.out
oatest0303/db2move.lst
oatest0303/tab1.msg
oatest0303/tab1.ixf
...

2. 建立目標資料庫

[db2inst1@devsvr2 db2inst1]$ db2 create db sample
DB20000I CREATE DATABASE 命令成功完成。

3. 執行 DDL 腳本建立結構 (含 Bufferpool、Tablespace、表、索引、約束)

[db2inst1@devsvr2 db2inst1]$ cd oatest0303
[db2inst1@devsvr2 oatest0303]$ db2 -tvf oatest.sql
...
# 大量 DDL 執行輸出,確認無嚴重錯誤 (WARNING 可接受)

關鍵:-tvf 參數:-t 以分號為語句結束符、-v 回顯命令、-f 指定檔案。

4. db2move LOAD 高效載入資料

[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 表示載入成功。

5. 檢查並啟用約束完整性 (SET INTEGRITY)

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 條記錄已選擇。

6. 批次啟用所有表約束 (自動化腳本)

利用 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 loadLoaded=Read, Rejected=0, Committed=Read
約束啟用SET INTEGRITY IMMEDIATE CHECKED表狀態從 PENDING 變為 NORMAL,查詢無錯誤
資料核對SELECT COUNT(*) 對比源端筆數完全一致

避坑指南

  • 外鍵順序:若 DDL 中外鍵建立順序錯誤,執行 db2 -tvf 會報錯。解決:將外鍵 DDL 獨立檔案,表建好後再執行 (見文章 225727)。
  • IDENTITY 欄位:db2move load -io 可忽略系統生成的身份欄位值,避免衝突。
  • 代碼集/編碼:源目標庫代碼集必須一致 (如均為 UTF-8),否則中文亂碼。
  • 權限遷移:db2look -e 包含 GRANT 語句,DDL 執行時同步遷移權限。

此流程已在多個 Linux→Linux 遷移專案驗證,核心心法:**DDL 先行、LOAD 极速、SET INTEGRITY 收尾、COUNT 核對**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved