WEB开发网
开发学院数据库DB2 用AWK实现DB2 数据库 Schema的同步 阅读

用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
}

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:AWK 实现 DB

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接