ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 巧用shell生成数据库检查脚本

巧用shell生成数据库检查脚本

Linux操作系统 作者:瀚海小王子 时间:2014-09-21 13:45:32 0 删除 编辑
在生产环境中需要部署大量的数据变更。对于新增的表,需要注意权限和同义词等。但是手动去检查这些变更是否生效就很麻烦。而且也不易维护,比如写好了一个脚本,可能在过一段时间,有一些紧急变更,需要把这些变更加进来,可能就忘了更新检查脚本。

考虑到检查的性能,不想查询数据,只需要保证能够正常访问表即可。所以写了如下的sql。目标就是通过shell来生成这样的sql脚本。
比如对于表TEST,检查是否可以访问,如果可以访问,就显示表TEST is accessible...
SELECT decode (count(*),0,rpad(' TEST' ,30,' ')),'is accessible...' comm FROM TEST WHERE ROWNUM<1;

可以采用如下的shell来生成对应的sql脚本。其中需要考虑单引号在awk中的使用。需要转义为 " '\'' "才可以。然后通过sqlplus来直接调用即可。
grep -i "CREATE TABLE" *.*|grep -v "|sort|uniq|awk"|sort|uniq|awk -F"CREATE TABLE" '{print $2}'|uniq|awk '{print "SELECT decode(count(*) ,0 ,rpad('\''  "$1" '\'',30,'\'' '\''))  tab_name,'\'' is accessible... '\''  comm FROM "$1" WHERE ROWNUM<1;"}' >sanity_check.sql
sqlplus  -s $1 << EOF
set pages 0
@sanity_check.sql
!rm sanity_check.sql 
EOF

来看看效果。
> ksh sanity_check.sh n1/n1
  TEST9_EXT_BILL_STATEMENT        is accessible...
  TEST9_EXT_CHARGE_INFO           is accessible...
  TEST9_ROOT_CHILD_CL_ACTION      is accessible...
  TEST9_ROOT_CHILD_NTWK_ACT       is accessible...
  TEST9_TMP_BAN_AUTO_FIXPATH      is accessible...
  TEST99_MNP_AGR_PARAM             is accessible...
  TEST99_MNP_AGR_SERVICES          is accessible...
  TEST99_MNP_SUB_INFO              is accessible...
  TEST9_ADDRESS_DATA            is accessible...
  TEST9_ADDRESS_HIS             is accessible...
  TEST9_ADDRESS_NAME_LINK       is accessible...
  TEST9_ADR_NM_LINK_HIS         is accessible...
  TEST9_TEST9_RULE_BASE            is accessible...
  TEST9_NAME_DATA               is accessible...
  TEST9_NAME_HIS                is accessible...
  TEST9_PREPAID_RES_HIS         is accessible...
  TEST9_PREPAID_RESOURCE        is accessible...
  TEST9_PREPAID_SUB_HIS         is accessible...


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29900508/viewspace-1276081/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-09-21

  • 博文量
    219
  • 访问量
    175841