目的
最近维护生产系统发现不断地有关联系统需要我这边提供数据文件的情况,之前没有做统一的卸数脚本,导致定时执行的shell越来越多,于是最近捣鼓了一个通用脚本,分享一下。
思路
利用spool进行数据导出,导出的查询sql、导出文件名、上传地址、上传用户等记录在数据库表中,定时执行shell,查询到结果后,循环处理,并在处理成功后,update结束标志
shell代码
#!/bin/bash
#引用crontab执行用户的环境变量,根据需要修改
source /app/.profile
#数据库SID名
sid=orcl
#数据库用户名
orauser=oracle
#数据库用户名
orapasswd=oracle
#当前服务器日期
datenow=$(date +%Y%m%d)
#日志存放路径&日志文件名
log_file=/app/log/exp_$(date +%Y%m%d).log
#需要执行业务种类
#sql~导出文件名~ok文件名~上传服务器IP~上传服务器用户名~密码~上传路径
value=`sqlplus -S "${orauser}/${orapasswd}@${sid}" << !
set heading off
set feedback off
set pagesize 0
set verify off
set echo off
set linesize 2000
select val||'~'||exp_name||'~'||okfile_name||'~'||up_ip||'~'||up_user||'~'||up_pwd||'~'||up_dir||'^' from tbshell where type = 'K_EXP_SQL';
exit;
!`
#将返回字符串进行数组切分,分隔符'^'
OLD_IFS="$IFS"
IFS="^"
arr=($value)
IFS="$OLD_IFS"
#循环取数处理开始
for((i=0;i<${
#arr[@]};i++));do
#再次切分,分隔符'~':sql~导出文件名~ok文件名~上传服务器IP~上传服务器用户名~密码~上传路径
OLD_IFS="$IFS"
IFS="~"
arr_n=(${
arr[${
i}]}