巧用shell脚本生成快捷脚本(r2第12天)

在升级的过程中,可能需要准备一些额外的脚本,比如说做数据迁移的时候为了考虑性能,需要做如下的额外工作: 1.将部分表置为nologging 2.将部分index置为nologging 3.将部分foreign key constraint置为disable 4.将部分trigger 置为disable 在完成数据升级后,再置为logging,enable状态。 但是在准备脚本的过程中,总是为这些小脚本而头疼,可能在升级前临时增加了一些表或者取消了部分表。或者有了其他的变更,维护这些脚本就显得有些体力工作了。 最后下决心改变这种状态,直接根据规则生成新的脚本。在不同的环境中脚本内容可能略有不同,但是功能不打折。 首先需要准备一个文件tablst,里面是文件的列表 比如: table1 table2 table3 ... 然后使用如下的脚本,就能生成完整的脚本,在升级前nologging,disable的工作就生成脚本到pre目录下,logging,enable的工作就生成脚本到post目录下 脚本内容也没有了冗余。


logging_flag=logging
nologging_flag=nologging
disable_flag=disable
enable_flag=enable
awk '{print "'\''" $1 "'\''" ","}' ../parfile/tablst |sed -e '/^$/d' -e '$s/.$//' > tablst.temp
table_list=`cat tablst.temp`


function pre_act
{
logging_ind=$1
enable_ind=$2
act_type=$3
     sqlplus -s $4 <<EOS
     set feedback off
     set pages 0
     set linesize 200
     spool $act_type/tab_$logging_ind.sql
     prompt -- table $logging_ind
     select 'alter table '||table_name||' $logging_ind;' from user_tables where  table_name in ($table_list);
     spool off;
     spool $act_type/index_$logging_ind.sql
     prompt -- index $logging_ind
     select 'alter index '||index_name||' $logging_ind;' from user_indexes where table_name in ($table_list);
     spool off;
     spool $act_type/fk_constraint_$disable_flag.sql
     prompt --FK constraint $enable_ind
     SELECT
           'ALTER TABLE '||TABLE_NAME||' $enable_ind  CONSTRAINT '|| CONSTRAINT_NAME||';' FROM USER_CONSTRAINTS WHERE
            CONSTRAINT_TYPE='R' UNION SELECT 'ALTER TABLE '||UCA.TABLE_NAME||' DISABLE  CONSTRAINT '|| UCA.CONSTRAINT_NAME||';'
     FROM
            USER_CONSTRAINTS UCA , 
            (SELECT  CONSTRAINT_NAME
               FROM  USER_CONSTRAINTS
               WHERE CONSTRAINT_TYPE IN ('P','U')
     ) tmp
     WHERE UCA.CONSTRAINT_TYPE = 'R' 
       AND tmp.constraint_name = UCA.R_CONSTRAINT_NAME
       and UCA.table_name in ($table_list) ;
     spool off;
     spool $act_type/trigger_disable.sql
     prompt trigger disable
     SELECT
           'ALTER TRIGGER ' ||TRIGGER_NAME||' $enable_ind ;'
     FROM
            USER_TRIGGERS;
     spool off;
EOS
}


pre_act  $nologging_flag $disable_flag pre $1
pre_act  $logging_flag   $enable_flag  post $1

脚本生成的sql脚本如下:
pre > 
total 83
-rw-r--r-- 1 xxxx dba 11280 Jun 23 21:00 fk_constraint_disable.sql
-rw-r--r-- 1 xxxx dba 42631 Jun 23 21:00 index_nologging.sql
-rw-r--r-- 1 xxxx dba 13888 Jun 23 21:00 tab_nologging.sql
-rw-r--r-- 1 xxxx dba   621 Jun 23 21:00 trigger_disable.sql

post > ls -lrt
total 69
-rw-r--r-- 1 xxxx dba 13886 Jun 23 21:00 tab_logging.sql
-rw-r--r-- 1 xxxx dba 42629 Jun 23 21:00 index_logging.sql
-rw-r--r-- 1 xxxx dba 11279 Jun 23 21:00 fk_constraint_disable.sql
-rw-r--r-- 1 xxxx dba   621 Jun 23 21:00 trigger_disable.sql

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

原文发表时间:2014-06-23

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏落花落雨不落叶

canvas画简单电路图

57011
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

3945
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

30510
来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4618
来自专栏魂祭心

原 canvas绘制clock

3924
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6478
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3025
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2605
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2657
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2517

扫码关注云+社区