專案從測試環境上線生產時,需遷移所有程式、表結構與資料。利用 DB2 Federation (聯邦資料庫) 建立目標庫到來源庫的連接,透過 Nickname (別名) 實現結構克隆與資料裝載,構建輕量級遷移工具。
目標庫 (生產) <-- Nickname --> 來源庫 (測試)
| |
CREATE TABLE ... LIKE SELECT * FROM Nickname
| |
LOAD FROM CURSOR 游標資料流
-- 1. 建立 Wrapper (包裝器)
CREATE WRAPPER FEDB2 LIBRARY 'libdb2drda.a' OPTIONS (
ADD DB2_FENCED 'N'
);
-- 2. 建立 Server (遠端伺服器定義)
CREATE SERVER FE206
TYPE DB2/UDB
VERSION '9.7'
WRAPPER FEDB2
AUTHORIZATION ODSDEV
PASSWORD odsdev
OPTIONS (
ADD DBNAME 'cqtest1'
);
-- 3. 建立 User Mapping (用戶映射)
CREATE USER MAPPING FOR ODSDEV SERVER FE206 OPTIONS (
ADD REMOTE_AUTHID 'odsdev',
REMOTE_PASSWORD '******'
);
-- 4. 建立 Nickname (遠端表別名)
CREATE NICKNAME TBOWNER.NT_CUST FOR FE206.TBOWNER.CUST;
-- 5. 克隆表結構 (含壓縮、不記錄日誌)
CREATE TABLE TBOWNER.CUST LIKE TBOWNER.NT_CUST
IN TBS_ODS_01 COMPRESS YES NOT LOGGED INITIALLY;
-- 6. 游標裝載資料 (高效批量)
DECLARE CUR_XXX CURSOR FOR SELECT * FROM TBOWNER.NT_CUST;
LOAD FROM CUR_XXX OF CURSOR REPLACE INTO TBOWNER.CUST;
| 元件 | 作用 | 關鍵參數 |
|---|---|---|
| Wrapper | 驅動程式載入點 | libdb2drda.a (DB2 DRDA 協議) |
| Server | 遠端資料庫連線端點 | TYPE DB2/UDB, VERSION, DBNAME |
| User Mapping | 認證映射 | LOCAL -> REMOTE 用戶/密碼 |
| Nickname | 遠端表本地別名 | 可像本地表一樣查詢/ JOIN |
| CREATE TABLE ... LIKE | 結構完整複製 | 含索引、約束、壓縮屬性 |
| LOAD FROM CURSOR | 零落地資料流傳輸 | 繞過中間檔案,記憶體直傳 |
#!/bin/bash
# migrate_table.sh
SCHEMA=$1
TABLE=$2
TBS=$3
# 動態建立 Nickname (若不存在)
db2 "CREATE NICKNAME ${SCHEMA}.NT_${TABLE} FOR FE206.${SCHEMA}.${TABLE}"
# 克隆結構
db2 "CREATE TABLE ${SCHEMA}.${TABLE} LIKE ${SCHEMA}.NT_${TABLE} IN ${TBS} COMPRESS YES NOT LOGGED INITIALLY"
# 載入資料
db2 "DECLARE CUR_MIG CURSOR FOR SELECT * FROM ${SCHEMA}.NT_${TABLE}; \
LOAD FROM CUR_MIG OF CURSOR REPLACE INTO ${SCHEMA}.${TABLE}"
# 驗證
db2 "SELECT COUNT(*) FROM ${SCHEMA}.${TABLE}"
db2 "SELECT COUNT(*) FROM ${SCHEMA}.NT_${TABLE}"
優勢與限制
- ✅ 無需中間匯出檔案,網路直傳
- ✅ 結構與資料同步一致性
- ✅ 可並行多表遷移 (多 Session)
- ✅ 支援異構 DB2 版本 (DRDA 協議)
- ⚠️ 需網路互通、防火牆開放 DRDA 埠 (預設 446/50000)
- ⚠️ 大表 LOAD 耗時長,建議維護窗口執行
- ⚠️ Nickname 不支援某些 DDL (如 ALTER NICKNAME)
適用場景
- 測試 → 生產 上線部署
- 跨資料中心資料同步
- 異構 DB2 版本遷移 (9.5 → 9.7 → 10.5+)
- 資料倉儲 ETL 來源抽取層
聯邦資料庫技術將「跨庫遷移」轉化為「本地操作」,是 DB2 生態系中最優雅的遷移利器。
Copyright © 程式碼之家 All Rights Reserved