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

以 AWK 實現 DB2 資料庫 Schema 同步自動化

     編輯:DB2 教學

專案常見情境:團隊共用 SIT 整合測試資料庫,各開發人員本機保留單元測試資料庫。模型變更導致 SIT Schema 更新時,需同步至各本機環境並保留既有測試資料。本文提供基於 AWK/SHELL 的自動化同步方案。

環境假設

  • SIT:AIX 5.1 + DB2 8.1
  • 本機:Windows XP + DB2 8.1 for Windows + Cygwin
  • 資料庫名稱:cusgadev

同步流程 10 步驟

  1. 取得 SIT 最新 Schema(db2look)
  2. 取得本機舊 Schema
  3. 本機卸出現有資料(db2move export)
  4. 比對新舊 Schema 差異
  5. 無變更 → 直接重建
  6. 有變更 → 建立暫存表 → 產生 INSERT INTO tmp SELECT ... FROM old SQL → 導出暫存表資料 → 刪除暫存表 → 替換對應匯出檔
  7. 取得新 Schema 表空間名稱
  8. 重建資料庫
  9. 選擇性匯入新增表資料
  10. 檢查資料庫完整性

關鍵指令與 AWK 腳本片段

擷取 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 打破環路,檢查通過後重建。

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