專案常見情境:團隊共用 SIT 整合測試資料庫,各開發人員本機保留單元測試資料庫。模型變更導致 SIT Schema 更新時,需同步至各本機環境並保留既有測試資料。本文提供基於 AWK/SHELL 的自動化同步方案。
cusgadevdb2look)db2move export)INSERT INTO tmp SELECT ... FROM old SQL → 導出暫存表資料 → 刪除暫存表 → 替換對應匯出檔擷取 Schema:
# SIT
db2look -d cusgadev -i db2admin -w db2admin -e -a -o cusnew.sql
# 本機
db2look -d cusgadev -e -a -o cusold.sql
卸出資料:db2move cusgadev export(產生 IXF 檔與 db2move.lst 清單)
格式化與比對(AWK 處理大小寫、空白、提取 TABLE 清單、找出新增/刪除/變更表)
產生資料遷移 SQL(unload.sql):
# 建立暫存表(新結構)
CREATE TABLE sihitranstmptbl (新欄位定義);
# 映射相容欄位,新增欄位依型別給預設值(字串'', 數值0, TIMESTAMP用CURRENT TIMESTAMP)
INSERT INTO sihitranstmptbl (欄位清單) SELECT (對應欄位/預設值) FROM 舊表;
# 導出暫存表資料覆蓋原 IXF
EXPORT TO '對應.ixf' OF IXF SELECT * FROM sihitranstmptbl;
DROP TABLE sihitranstmptbl;
執行:db2 -z result.txt -tvf unload.sql,檢查 result.txt 修正至無誤。
從新 Schema 提取表空間名稱,產生建立緩衝池/表空間指令(需將 <filename> 替換實際路徑)。重建資料庫步驟:編輯 db2move.lst 移除舊表 → drop database → create database ... codeset iso8859-1 territory cn → 連線 → 調整日誌參數 → 建立緩衝池/表空間 → db2 -tvf cusnew.sql 建立物件 → db2move load 載入資料。
CheckIntegrity.sh:產生 SET INTEGRITY FOR table IMMEDIATE CHECKED 腳本並執行。
CntDb.sh:查詢各表筆數驗證載入完整性。
遇外鍵循環依賴需暫時 ALTER TABLE ... DROP FOREIGN KEY 打破環路,檢查通過後重建。