专栏首页杨建荣的学习笔记利用shell脚本生成动态sql(67天)

利用shell脚本生成动态sql(67天)

在一些分布式环境中,可能涉及到的数据库有很多,相关的数据库用户也不少,有些看似简单的变更可能需要在不同的库,不同的用户间要进行复杂的操作。 现在我们有3套环境,一套是测试环境test,一套是准生产环境xprd,一套是生产环境prod, 比如在prod上有5个库一共20个用户,某一个变更可能在这20个用户里面要进行一些的操作。xprd里面和生产环境类似,也有数据库用户,test环境中有10个用户,需要在这10个用户中进行相应的操作。 最开始的时候,使用sqlplus和shell脚本,如下 sqlplus -s dbuser1/dbuser1@test <<EOF xxxxx EOF exit 。。。。。 但是发现每次在测试环境中部署的时候,得重新修改所有的用户名密码和数据库实例,在测试环境部署了之后,在准生产环境还得重新改一次,到生产环境还是得修改,每次改动都得花费不少的时间和精力,反复验证数据库连接串是否正确。如果脚本中有使用到db link,db link的名字也可能不一样,修改的时候就可能会漏掉。 每次做变更都很头疼。 这一次是下定决心来做改变了,决定使用shell脚本来生成动态的sql,通过将变量嵌入到sql中达到动态的效果。 下面是需要用到的环境变量,每一个后面都是一些数据库连接串。 专门用一个shell脚本来保存这些变量,conn_init.sh export testwork_conn=testtestWORK/TESTtestwork@TESTCUS1 export testwait_conn=testtestWAIT/TESTtestwait@TESTCUS1 export testssca_conn=testtestSSCA/TESTtestssca@TESTCUS1 export testsscb_conn=testtestSSCB/TESTtestsscb@TESTCUS1 export DIS1_testssca_conn=testDIS1SSCA/TESTDIS1ssca@TESTDIS1 export DIS1_testsscb_conn=testDIS1SSCB/TESTDIS1sscb@TESTDIS1 export 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@TESTDIS2 export DIS3_DBA_conn=testdba/testdba@TESTDIS3 export DIS4_DBA_conn=testdba/testdba@TESTDIS4 export opr_conn=testOPRC/TESTOPRC@TESTCUS1 export test_mst_ins=testtestWAIT.TESTCUS1 然后在所有的sql脚本中,来引用这些变量,使没个脚本在执行前对应的环境变量都生效。 脚本的内容可能是下面的样子: chmod +x ./conn_init.sh . ./conn_init.sh sqlplus $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; !##testtestWAIT conn $testwait_conn CREATE 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; !##testOPRC conn $opr_conn Insert into DST_ACTIVE_SNAPSHOT (REFTABLENAME, SYS_CREATION....... commit; !##TESTDIS1 conn $DIS1_testssca_conn CREATE 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; EOF exit 可以从上面的脚本看到相关的连接串都会从conn_init.sh中获取,为了确保连接串的正常,可以单独创建一个通用的文件,对已经存在的表来进行测试,比如说存在的表是TEST在所有的用户中都存在。 比如: test.sh sqlplus $testwork_conn <<EOF select count(*)from TEST where rownum<2; conn $testwait_conn select count(*)from TEST where rownum<2; conn $testssca_conn select count(*)from TEST where rownum<2; conn $ testsscb_conn select count(*)from TEST where rownum<2; 。。。。。

EOF exit 这样随时可以进行简单的测试,不用为连接串而苦恼了,可以专心考虑业务部分了。

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes),作者:笔记67天

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2014-05-09

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用shell脚本检测数据库连接访问情况(r10笔记第98天)

    最近要迁移几套环境,涉及的数据库有Oracle,MySQL,数量还不少,能够达到的目标就是整合后的服务器缩减幅度达到70%,这样一种迁移场景,就涉及到很多的网络...

    jeanron100
  • MySQL死锁的两个小案例

    最近花了些时间分析MySQL锁的内容,觉得越看越有意思。 我有个学习的习惯,有时候也不知道好还是不好,那就是喜欢直接上手练习,然后反过来练习理论。结果在...

    jeanron100
  • 最近的几个技术问题总结和答疑(三) (r8笔记第83天)

    突然发现最近忙里偷闲也回答了一些微信好友的问题。有的在公众号提问,有的私信给我。简单整理了一下。 问题1: 之前使用expdp和impdp导出导入数据库stat...

    jeanron100
  • 移动端Web页面常见问题解决

    经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网页,这样字会非常小,所以苹果当初就把iPhone 4的960*640...

    空空云
  • 败给深蓝20年后,棋王卡斯帕罗夫说:智能机器不是人类的威胁

    陈桦 编译整理 量子位 报道 | 公众号 QbitAI 1985年,22岁的棋手卡斯帕罗夫拿下了他人生中的第一个世界冠军,再也没有人类能撼动他在国际象棋界的地位...

    量子位
  • ffmpeg android音频解码

    音频解码就是将mp3 aac等格式这些文件解析为pcm格式的过程。 和视频解码流程一样,只是有些函数不一样

    曾大稳
  • Linux 系统 /var/log/journal/ 垃圾日志清理

    版权声明:本文为米扑博客原创文章,未经米扑博客允许不得转载。 https://blog.csdn.net/sunboy_2050/article/det...

    阳光岛主
  • 贝叶斯文本分类c#版

    关于这个话题,博客园已经有多个版本了 基于朴素贝叶斯分类器的文本分类算法(上) 也谈贝叶斯分类(C#)版本 PyMining-开源中文文本数据挖掘平台 Ver ...

    用户1177380
  • Linux 系统 /var/log/journal/ 垃圾日志清理

    版权声明:本文为米扑博客原创文章,未经米扑博客允许不得转载。 https://blog.csdn.net/sunboy_2050/...

    阳光岛主
  • Golang 简单的读负责均衡

    master-slave(n) 读库集群负载均衡器(简单轮询)+时间间隔错峰。 github 地址:https://github.com/Plen-wang/...

    王清培

扫码关注云+社区

领取腾讯云代金券