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

在生产环境中需要部署大量的数据变更。对于新增的表,需要注意权限和同义词等。但是手动去检查这些变更是否生效就很麻烦。而且也不易维护,比如写好了一个脚本,可能在过一段时间,有一些紧急变更,需要把这些变更加进来,可能就忘了更新检查脚本。

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

可以采用如下的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 ROWNUMsanity_check.sql
sqlplus  -s $1
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...

时间: 2024-09-29 06:57:48

巧用shell生成数据库检查脚本的相关文章

假期前的数据库检查脚本之主备关系(r11笔记第46天)

   快过年了,很多系统都要进入最后的检查和复验阶段,一方面在节假日前,提前发现问题总比过节的时候发现要好.另一方面如果出现故障的时候能及时进行处理,这个时候我们就需要有一个尽可能全面的元数据收集.而且还有一点比较重要的就是工作交接,如果你临时有事,需要让同事来代劳,你得提供清晰易懂的信息给他们.    可能有的同学会觉得我们已经有了数据库监控,基本的性能分析,这个工作是不是就可以忽略了.监控只是标记状态,出现问题时候它没法帮你处理,还是需要人工介入,而人工介入尽可能全面的信息就是这些元数据了,

linux shell生成apache证书脚本

apache+mod_ssl中证书生成方法 首先生成证书请求:  代码如下 复制代码 #openssl req -new > server.csr 按照提示输入相关信息后,会在当前目录自动生成server.csr和privkey.pem两个文件,privkey.pem是私钥文件,默认会有passphrase,如果不移除的话,每次运行apache的时候都会提示输入passphrase,所以如果服务器重启后如果你不在服务器前面,则apache无法正常运行. 所以,第二步需要移除passphrase:

巧用shell脚本生成快捷脚本

在升级的过程中,可能需要准备一些额外的脚本,比如说做数据迁移的时候为了考虑性能,需要做如下的额外工作: 1.将部分表置为nologging 2.将部分index置为nologging 3.将部分foreign key constraint置为disable 4.将部分trigger 置为disable 在完成数据升级后,再置为logging,enable状态. 但是在准备脚本的过程中,总是为这些小脚本而头疼,可能在升级前临时增加了一些表或者取消了部分表.或者有了其他的变更,维护这些脚本就显得有些

使用shell生成orabbix自动化配置脚本

在使用Orabbix监控Oracle的时候,本身和zaabix agent最大的不同便是使用Orabbix不需要对每个数据库实例都安装单独的agent,而是一个Orabbix实例可以对应多个数据库实例,Orabbix是基于JDBC的方式来实现的,基于此,配置的工作就尤为重要了. 对于一个数据库实例配置Orabbix,大体有下面三件事需要考虑. 网络的配置,防火墙中开放对应的端口,这个是在使用Orabbix agent的时候,为了使得Orabbix agent能够通过jdbc的方式访问到数据库,我

<求教>关于.sql脚本文件如何生成数据库的问题

问题描述 <求教>关于.sql脚本文件如何生成数据库的问题 我使用powerdesigner导出oracle 11g数据库的.sql脚本文件,然后在SQL Plus中执行.sql脚本文件,报出许多错误,包括表名无效,表或视图不存在,指定的索引不存在,在网上找到一些类似的问题,都没能解决,请问有大神知道该如何解决么? 解决方案 我没有用过PowerDesigner生成的脚本.不过一般来说,你从系统生成的脚本,前面有若干DROP的,都是防御性的,是怕你现在生成的库中有相同名称的对象,所以预先帮你把

[20170515]检查数据库scn脚本.txt

[20170515]检查数据库scn脚本.txt --//简单写一个脚本检查数据库各个scn的大小: column TABLESPACE_NAME format a20 SELECT b.file#       ,b.name       ,c.STATUS       ,c.FUZZY       ,a.checkpoint_change# "数据库记录的scn"       ,b.checkpoint_change# "控制文件记录的开始scn"       ,

SQLSERVER数据库升级脚本图文步骤_MsSql

只能远程协助的方式.我特意做了一个脚本,用电话指导客户在SSMS里执行一下脚本就可以了 1.0的数据库跟1.1的数据库的区别是1.1的数据库里的其中一个[CT_OuterCard]表比1.0的多了6个字段,其他所有表都一样 还有存储过程增加了很多,其他都没有改变 首先,先在公司的服务器数据库上生成存储过程脚本,数据库是1.1版本的,下面的图片里没有说明的,都是默认设置,下一步即可 选中数据库->右键->任务->生成脚本 当然,如果你的数据库里有自定义函数的话,也可以勾选函数,如果我们的数

SQL Server 动态生成数据库所有表Insert语句

一. 背景 SQL Server,如果我们需要把数据库A的所有表数据到数据库B中,通常我们会怎么做呢?我会使用SSMS的导入导出功能,进行表数据的导入导出,无可厚非,这样的导入非常简单和方便: 但是,当我们的表有上百个,而且有些表是有自增ID的,那么这个时候使用SSMS的话,你需要一个个手动设置(如图1),你要知道,需要设置上百个的这些选项是件多么痛苦的事情,而且最后很可能会因为外键约束导致导入导出失败. (图1) 虽然SSMS在导入导出的最后一步提供了生成SSIS包的功能,但是对于转移数据的需

linux中shell生成随机密码示例

为了生成更加无序及相应复杂的密码,因此写了个生成随机密码的脚本,在此之前生成密码通常我是通过如下命令实现的 cat /dev/urandom | head -n 1 | md5sum | head -c 16 好了,不说所了,直接上脚本  代码如下 复制代码   [root@liufofu shell]# cat make_random_passwd.sh #!/bin/bash ######################################### # author