在一些分布式环境中,可能涉及到的数据库有很多,相关的数据库用户也不少,有些看似简单的变更可能需要在不同的库,不同的用户间要进行复杂的操作。现在我们有3套环境,一套是测试环境test,一套是准生产环境xprd,一套是生产环境prod,比如在prod上有5个库一共20个用户,某一个变更可能在这20个用户里面要进行一些的操作。xprd里面和生产环境类似,也有数据库用户,test环境中有10个用户,需要在这10个用户中进行相应的操作。最开始的时候,使用sqlplus和shell脚本,如下sqlplus -s dbuser1/dbuser1@test <<EOFxxxxxEOFexit。。。。。但是发现每次在测试环境中部署的时候,得重新修改所有的用户名密码和数据库实例,在测试环境部署了之后,在准生产环境还得重新改一次,到生产环境还是得修改,每次改动都得花费不少的时间和精力,反复验证数据库连接串是否正确。如果脚本中有使用到db link,db link的名字也可能不一样,修改的时候就可能会漏掉。每次做变更都很头疼。这一次是下定决心来做改变了,决定使用shell脚本来生成动态的sql,通过将变量嵌入到sql中达到动态的效果。下面是需要用到的环境变量,每一个后面都是一些数据库连接串。专门用一个shell脚本来保存这些变量,conn_init.shexport testwork_conn=testtestWORK/TESTtestwork@TESTCUS1export testwait_conn=testtestWAIT/TESTtestwait@TESTCUS1export testssca_conn=testtestSSCA/TESTtestssca@TESTCUS1 export testsscb_conn=testtestSSCB/TESTtestsscb@TESTCUS1 export DIS1_testssca_conn=testDIS1SSCA/TESTDIS1ssca@TESTDIS1export DIS1_testsscb_conn=testDIS1SSCB/TESTDIS1sscb@TESTDIS1export DIS2_testssca_conn=testDIS2SSCA/TESTDIS2ssca@TESTDIS2 export DIS2_testsscb_conn=testDIS2SSCB/TESTDIS2sscb@TESTDIS2 export DIS3_testssca_conn=testDIS3SSCA/TESTDIS3ssca@TESTDIS3 export DIS3_testsscb_conn=testDIS3SSCB/TESTDIS3sscb@TESTDIS3 export DIS4_testssca_conn=testDIS4SSCA/TESTDIS4ssca@TESTDIS4 export DIS4_testsscb_conn=testDIS4SSCB/TESTDIS4sscb@TESTDIS4 export CUST_DBA_conn=testdba/testdba@TESTCUS1 export DIS1_DBA_conn=testdba/testdba@TESTDIS1 export DIS2_DBA_conn=testdba/testdba@TESTDIS2export DIS3_DBA_conn=testdba/testdba@TESTDIS3export DIS4_DBA_conn=testdba/testdba@TESTDIS4export opr_conn=testOPRC/TESTOPRC@TESTCUS1 export test_mst_ins=testtestWAIT.TESTCUS1然后在所有的sql脚本中,来引用这些变量,使没个脚本在执行前对应的环境变量都生效。脚本的内容可能是下面的样子:chmod +x ./conn_init.sh. ./conn_init.shsqlplus $testwork_conn<<EOF spool TEST_TAB_CHG.log set echo on CREATE TABLE TEST_TAB_CHG( HOT_LINE_NO VARCHAR2(25) CONSTRAINT test_l_HOT_LINE_NO_NN NOT NULL, ..... FUTURE_3 VARCHAR2(30)) TABLESPACE DATAL01 LOGGING;grant UPDATE on MI9_OUTCOL_CS_HOTLINE to CCBSSOAUSR_SEL; !##testtestWAITconn $testwait_connCREATE TABLE TEST_TAB_CHG( FUTURE_3 VARCHAR2(30)) TABLESPACE DATAL01 LOGGING;grant SELECT on TEST_TAB_CHG to testtestWORK_SEL; grant SELECT,UPDATE,INSERT,DELETE on TEST_TAB_CHG to testtestWORK_ALL; !##testOPRCconn $opr_connInsert into DST_ACTIVE_SNAPSHOT (REFTABLENAME, SYS_CREATION.......commit; !##TESTDIS1conn $DIS1_testssca_connCREATE MATERIALIZED VIEW TEST_TAB_CHG REFRESH FORCE ON DEMAND WITH ROWID USING DEFAULT LOCAL ROLLBACK SEGMENT DISABLE QUERY REWRITE AS SELECT *FROM TEST_TAB_CHG @$ref_mst_ins; grant SELECT on TEST_TAB_CHG to PUBLIC; EOFexit可以从上面的脚本看到相关的连接串都会从conn_init.sh中获取,为了确保连接串的正常,可以单独创建一个通用的文件,对已经存在的表来进行测试,比如说存在的表是TEST在所有的用户中都存在。比如:test.sh sqlplus $testwork_conn <<EOFselect count(*)from TEST where rownum<2;conn $testwait_connselect count(*)from TEST where rownum<2;conn $testssca_connselect count(*)from TEST where rownum<2;conn $ testsscb_connselect count(*)from TEST where rownum<2;。。。。。

EOF

利用shell脚本生成动态sql(67天)相关推荐

  1. shell脚本中编写SQL中 以传参(${accdate})的方式 动态:求 前12个月的日期和求 前一周(7天的日期)

    shell脚本中 编写SQL中 以传参(${accdate})的方式 动态 求 前12个月的日期 CAST(CAST(DATE_FORMAT(DATE_SUB(from_unixtime(unix_t ...

  2. linux shell ddos木马,利用Shell 脚本解决DDOS攻击问题

    思路:主要利用 awk ,if结构,sort,uniq #!/bin/bash FilePath="access.log" awk '{print $1}' $FilePath | ...

  3. linux shell spool,Linux/Unix shell 脚本中调用SQL,RMAN脚本

    Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...

  4. php shell ddos,利用Shell 脚本解决DDOS攻击问题

    思路:主要利用 awk ,if结构,sort,uniq #!/bin/bash FilePath="access.log" awk '{print $1}' $FilePath | ...

  5. python调用shell脚本的参数_使用python执行shell脚本 并动态传参 及subprocess的使用详解

    最近工作需求中 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subpr ...

  6. mysql shell可视化_shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中...

    shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中 利用shell脚本将文本数据导入到mysql中 需求1:处理文本中的数据,将文本中的数据插入到mys ...

  7. linux 循环显示所有的sh.*文件.,利用shell脚本遍历文件夹内所有的文件并作整理统计的方法...

    环境: Ubuntu下采用shell脚本实现 案例简述:文件夹内有许多子文件夹,这里需要自动读取所有的文件,包括他们的地址和文件名.通过观察文件名的规律,按照一定的规则裁剪出文件名的某一部分,该部分为 ...

  8. linux中利用shell脚本条件执行linux命令

    linux中利用shell脚本条件执行命令 在linux环境中,我们总会有一些命令需要经常用,例如经常跳转到某些目录下或者执行某些命令,输入一连串的命令是很烦的,此时我们可以预先写一些脚本然后根据我们 ...

  9. Linux中使用shell脚本生成随机数

    Linux中使用shell脚本生成随机数 1.主体思想: 为了实现随机数的随机性,所以在这里借用date中的%s%N可以输出从1970年1月1日00:00:00到目前经历的秒数,从而产生变化的数字,再 ...

最新文章

  1. 雅虎的Web优化最佳实践
  2. 快速幂 (转载,详细)
  3. 萌宝出街,熊孩子逆袭小小“时髦精”
  4. Java应用性能调优工具介绍及实践
  5. access统计班级人数_7省新高考选科统计出炉!学科难度系数排行再度爆冷
  6. ArcGIS服务器的feature图层限制
  7. 计算机网络应用基础_学习笔记之《计算机网络》概述
  8. LoRa协议在Arduino上的应用——原理及代码分析(二)
  9. 【qq机器人】定时发送消息大全
  10. 慕课乐学python单元测试答案_中国大学慕课答案第五章单元测试答案_乐学软件工程完整答案...
  11. 怎么让termux运行Java_在安卓手机上通过 Termux 运行编译/运行 .NET 应用
  12. 微前端 - micro-app 数据通信
  13. 创新突破,索爱S5耳机实现空间音频和动态头部跟踪
  14. android 4.4 flac,如何在Android中将音频原始转换为FLAC
  15. 思岚科技亮相工博会,加速技术下沉,赋能产业新发展
  16. git和github的入门使用(一)
  17. 【干货】我的机器学习入门路线图
  18. LabVIEW控制Arduino采集多路DS18B20温度数值(进阶篇—3)
  19. JavaEE-面试-POI面试回答思路
  20. SUSCTF2022misc——ra2

热门文章

  1. Spring Security系列教程21--会话管理之实现集群会话
  2. 中国棋手芈昱廷战胜日本围棋机器人DeepZenGo
  3. 如何转行到软件测试——我来教你
  4. ubuntu下右键无法打开终端(open in terminal)的解决办法
  5. NOIP知识汇总及模板整理
  6. 机器学习笔记-利用线性模型进行分类
  7. 99Echarts - 地理坐标/地图(Hexagonal Binning)
  8. 基于JAVA植物大全和智能识别系统(Springboot框架+AI人工智能) 开题报告
  9. 工信部:个人可办网站,但需实名备案
  10. 转发与重定向的区别【通俗易懂,句句是要点】