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

简易版:

sqlplus -s scott/tiger@orcl<


升级版:【串行执行】读取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<


尊享版:【并发执行】并行跑完一个后,生成.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<

最终版:并发执行/执行过程记录.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<

完全原创,欢迎指正!

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

你可能感兴趣的:(linux&shell)