巧用shell脚本生成快捷脚本(r2第12天)
时间:2022-05-04
本文章向大家介绍巧用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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python音频文件中pcm格式提取
- Spring系列之事务的控制 注解实现+xml实现+事务的隔离等级
- Leetcode刷题 237. 删除链表中的节点 两行代码实现
- python提取视频第一帧图片
- Leetcode刷题 206. 反转链表 递归迭代两种方法实现
- airtest本地连接和远程连接
- Flutter基础widgets教程-TextField篇
- poco对象生成的几种方式根据你使用不同的ui决定
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL
- SpringMVC系列之SpringMVC快速入门 MVC设计模式介绍+什么是SpringMVC+ SpringMVC的作用及其基本使用+组件解析+注解解析
- [Go] GoAdminGroup/go-admin的安装和运行
- 算法篇:滑动窗口(一)
- PHP代码审计02之filter_var()函数缺陷
- Flutter基础widgets教程-Tooltip篇
- 08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成