專案組共用 SIT (AIX/DB2 8.1) 整合測試資料庫,各開發人員 PC (Windows XP/DB2 8.1/Cygwin) 維護單元測試庫。模型變更導致 SIT Schema 更新時,需高效同步至各本地環境,並保留本地測試資料。
db2look -d cusgadev -i db2admin -w pwd -e -a -o cusnew.sqldb2look -d cusgadev -e -a -o cusold.sqldb2move cusgadev export (產生 IXF 檔與 db2move.lst 清單)gettbllist)gettableonlyinone) → 處理 db2move.lst (刪除舊有、新表選擇性導入)gettableschema + AWK) → unload.sqldb2 -z result.txt -tvf unload.sql 重新導出變更表資料,檢查 result.txt 無錯誤cusnew.sql 建立物件 → db2move load 載入資料 → 選擇性導入新表資料 → db2dart / 完整性檢查腳本驗證sed -e "s/^[ ]*//" -e "s/[ ][ ]*/ /g" ${FILE} | tr [:upper:] [:lower:] > ${FILE}.tmp
grep -i "^[ ]*create[ ][ ]*table" $1 | sed -e "s/^[ ]*CREATE[ ][ ]*TABLE//" -e "s/(.*$//" | sort > $2
awk -F"." '{printf("%s\n", $2)}' | awk -F"\"" '{printf("%s ", $2)}' | sort 遍歷比對 grep 判斷是否存在於另一 Schema。
awk -v _tblname=$1 'BEGIN{isThisTable=0}{if($1=="create"&&$2=="table"&&match($0, "\""_tblname"\"")){isThisTable=1; printf("create table %s (\n", _tblname)} else if(isThisTable){if(match($0,";")){isThisTable=0; if($1=="in") printf(";\n", $0); else printf("%s\n", $0)} else if(match($0,"timestamp not null with default ,")){printf("%s timestamp not null with default current timestamp ,\n", $1)} else printf("%s\n", $0)}}' $2 > $3
grep -i "^[ ]*in[ ]" ${NEWDBSCHEMA} | grep ";" | awk '{printf("%s\n", $2); if(NF>3 && $3=="INDEX" && $4=="IN") printf("%s\n", $5)}' | sort | uniq → 迴圈輸出 CREATE TABLESPACE ... PAGESIZE 8K MANAGED BY DATABASE USING (FILE '<filename>' 50000) bufferpool bf81
awk -F"!" -v _dbname=${DBNAME} 'BEGIN{printf("connect to %s;\n", _dbname)}{printf("set integrity for %s immediate checked;\n", $2)}' db2move.lst > ${DBNAME}.integrity.sql → db2 -tvf 執行。
unload.sql