巧用shell生成数据库检查脚本 (74天)

在生产环境中需要部署大量的数据变更。对于新增的表,需要注意权限和同义词等。但是手动去检查这些变更是否生效就很麻烦。而且也不易维护,比如写好了一个脚本,可能在过一段时间,有一些紧急变更,需要把这些变更加进来,可能就忘了更新检查脚本。 考虑到检查的性能,不想查询数据,只需要保证能够正常访问表即可。所以写了如下的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...

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-05-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Snova云数仓

Greenplum性能优化之路 --(一)分区表

分区表就是将一个大表在物理上分割成若干小表,并且整个过程对用户是透明的,也就是用户的所有操作仍然是作用在大表上,不需要关心数据实际上落在哪张小表里面。Green...

7.8K10
来自专栏杨建荣的学习笔记

关于奇怪的并行进程分析(三)(r6笔记第47天)

在前两篇的基础上,对于一个环境中存在的奇怪并行进程问题进行了初步的分析。 初步排除了是通过scheduler的job运行导致的,一方面因为运行的时间会有延迟,甚...

2734
来自专栏杨建荣的学习笔记

关于all_procedures的问题分析 (r9笔记第61天)

今天快下班的时候有一个同事问我一个存储过程的权限是否做过修改。我简单看了下发现这个滚出过程已经是很久以前创建的了,一直没有做过修改,所以就反馈给 他了。但是他过...

3386
来自专栏Rgc

mysql数据库优化(三)--分区

分区:把一个数据表的文件和索引分散存储在不同的物理文件中。 特点:业务层透明,无需任何修改,即使从新分表,也是在mysql层进行更改(业务层代码不动)

1003
来自专栏跟着阿笨一起玩NET

把数据库中表的内容转存为XML文件

600
来自专栏乐沙弥的世界

MySQL视图

视图是关系型数据库重要的组成部分之一,它可以限制数据访问,简化复杂查询,保持数据的独立性,以及基于相同的数据提供不同的视图等等。本文介绍MySQL数据库视图的一...

732
来自专栏技术记录

mySQL优化方案

1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得...

1908
来自专栏杨建荣的学习笔记

关于pl/sql中的绑定变量(r3笔记第73天)

在看关于shared pool的文档时,必定会提到绑定变量,也能够通过几个简单的例子对绑定变量带来影响有深刻的认识,但是在工作中,可能有时候我们就忘了绑定变量的...

2464
来自专栏Java帮帮-微信公众号-技术文章全总结

【数据库】MySQL进阶一、主外键讲解

MySQL进阶主外键讲解 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可...

3297
来自专栏杨建荣的学习笔记

生产环境sql语句调优实战第八篇(r3笔记第24天)

生产环境中的sql语句执行时间是很关键的性能指标,如果某个sql语句执行几个小时,优化以后几分钟,几十秒的话。会有很大的成就感,同时如果某个sql语句执行10秒...

2657

扫码关注云+社区