Unix shell脚本并行运行SQL脚本

3

我该如何设置这个KornShell(ksh)脚本,使其在tst1.sql完成后并行运行SQL脚本2、3,然后在2、3完成后运行tst4.sql?这种操作是否可行?

#/usr/bin/ksh
#SET ENVIRONMENT ORACLE

sqlplus user1/pw @/home/scripts/tst1.sql
sqlplus user1/pw @/home/scripts/tst2.sql
sqlplus user1/pw @/home/scripts/tst3.sql
sqlplus user1/pw @/home/scripts/tst4.sql
exit 0
1个回答

3

第一条命令应该同步执行...

如果你把最后两个命令作为后台进程启动(在命令的末尾加上 & 符号),它们将会并行运行。

你想要脚本在离开之前等待最后两个进程完成吗?

可以使用以下代码:

  sqlplus user1/pw @/home/scripts/tst1.sql
  sqlplus user1/pw @/home/scripts/tst2.sql &
  pid2=$!
  sqlplus user1/pw @/home/scripts/tst3.sql &
  pid3=$!
  # pseudo-code:
  # while (`ps -p"$pid2,$pid3" | wc -l` != "1");
  sqlplus user1/pw @/home/scripts/tst4.sql

是的,我想等待。我还想在2、3完成后添加另一个tst4.sql来运行。这可能吗? - jdamae
为什么不将tst2.sql和tst3.sql连接成一个文件(tmp.sql),在tst1.sql和tst4.sql之后同步执行呢?除非这些文件非常大(GB级别),否则这是您最简单的解决方案... - fabien
请您详细说明如何使用同步功能?没有文件很小。 - jdamae
需要并行运行2、3以更快地完成作业,然后完成最后一个SQL的运行。 - jdamae
我更新了我的答案...你只需要找出while循环的正确语法,但这应该可以工作。 - fabien
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接