shell利用sqlplus执行sql文件的方法及改进

简易版:

sqlplus -s scott/tiger@orcl<<EOF
#不显示执行结果,还是让他显示吧!set echo off feedback off heading off underline off;
 @/home/test.sql;
exit;
EOF


升级版:【串行执行】读取sql文件夹下的所有.sql文件并执行。

这种方法一次只能执行一个脚本,执行完一个才能继续往下执行。

p=`pwd`
cd ${p}/sql
files=`ls|awk -F: '{print $1}'`
index=0
for f in ${files[@]}
do
echo ${f}
sqlplus -s  scott/tiger@orcl<<EOF
@${p}/sql/${f};
exit;
EOF
let index++
done


尊享版:【并发执行】并行跑完一个后,生成.done文件。

可以实现跟踪执行状态,test.sql执行中会生成 test.doing文件,执行完毕,删除test.doing,并且创建test.done。

p=`pwd`
cd ${p}/sql
files=`ls|grep .sql|awk -F: '{print $1}'`
index=0
for f in ${files[@]}
do
{
echo ${f}
file=`echo ${f}|awk -F "." '{print $1}'`
touch ${file}.doing
sqlplus -s  scott/tiger@orcl<<EOF
@${p}/sql/${f};
exit;
EOF
cp ${f}  ${file}.done
rm ${file}.doing
######rm ${f}
} &
let index++
done

最终版:并发执行/执行过程记录.doing,结束记录.done/跳过存在.done的sql文件

p=`pwd`
cd ${p}/sql
files=`ls|grep .sql|awk -F: '{print $1}'`
index=0
for f in ${files[@]}
do
{
echo ${f}
file=`echo ${f}|awk -F "." '{print $1}'`
donefile="${p}/sql/${file}.done"
if [ -f ${donefile} ];then
echo "This file has been executed.--${file}.sql"
continue
else
touch ${file}.doing
sqlplus -s  scott/tiger@orcl<<EOF
@${p}/sql/${f};
exit;
EOF
cp ${f}  ${file}.done
rm ${file}.doing
fi
} &
let index++
done

完全原创,欢迎指正!

另外,对于并发数的控制,我还没有找到解决办法。因为oracle默认连接数是150,我一次也就执行10几个脚本,因此,我就放弃了控制并发数限制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值