用AWK实现DB2 数据库 Schema的同步
2007-05-20 16:19:51 来源:WEB开发网核心提示: 格式化SCHEMA文件为了比较新旧数据库的SCHEMA,我们需要将两个SCHEMA文件转换成统一格式,用AWK实现DB2 数据库 Schema的同步(4),包括:将所有大写替换成小写;删除所有行首的空格;将多个空格合并成1个空格,其中,gettbllist(){grep -i "
格式化SCHEMA文件
为了比较新旧数据库的SCHEMA,我们需要将两个SCHEMA文件转换成统一格式,包括:将所有大写替换成小写;删除所有行首的空格;将多个空格合并成1个空格。其中,空格包括制表符(Tab)和空格字符(Space)。
使用以下命令组合格式化SCHEMA文件:
sed -e "s/^[ ]*//"
-e "s/[ ][ ]*/ /g"
${OLDDBSCHEMA} | tr [:upper:] [:lower:] > ${OLDDBSCHEMATMP}
取得新旧数据库的table清单
定义如下函数,从数据库的SCHEMA文件中取得其中的table清单。这个函数适用于由db2look生成的、DB2数据库的DDL文件。
# 根据数据库的SCHEMA文件,取得其中的table清单。
# $1. 数据库的SCHMEA文件。
# $2. 输出的table清单文件。
gettbllist()
{
grep -i "^[ ]*create[ ][ ]*table" $1 > $2.tmp
sed -e "s/^[ ]*CREATE[ ][ ]*TABLE//"
-e "s/(.*$//"
$2.tmp | sort > $2
rm $2.tmp
}
找出仅在旧库或者仅在新库独有的表
定义如下函数,取出仅在指定数据库SCHEMA中存在的table的清单。这个函数适用于由db2look生成的、DB2数据库的DDL文件。
# 取出仅在第一个参数指定的数据库SCHEMA中存在的表的名称清单
# $1: 待分析的数据库SCHEMA文件
# $2: 用作参照的数据库SCHEMA文件
# $3: 屏幕输出的提示信息
gettableonlyinone()
{
if [ $# -eq 3 ]
then
echo $3
fi
TABLEINBOTH=""
for tblname in `awk -F"." '{printf("%s
", $2);}' $1 | awk -F"""
'{printf("%s ", $2)}' | sort`
do
grep -i ""$tblname"" $2 1>/dev/null 2>&1
if [ ! $? -eq 0 ]
then
if [ $# -eq 3 ]
then
echo $tblname
fi
else
TABLEINBOTH="${TABLEINBOTH} ${tblname}"
fi
done
}
更多精彩
赞助商链接