【问题标题】:Unix shell script run SQL scripts in parallelUnix shell 脚本并行运行 SQL 脚本
【发布时间】:2013-08-14 13:48:36
【问题描述】:

如何设置此 KornShell (ksh) 脚本以在 tst1.sql 完成后以 parallel 运行 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

【问题讨论】:

    标签: sql oracle shell parallel-processing ksh


    【解决方案1】:

    第一个命令应该同步运行...

    如果您将最后两个命令作为后台进程启动(在命令末尾添加 &),它们将并行运行。

    您是否希望脚本在离开前等待最后两个进程完成?

    这样的事情应该可以工作:

      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
    

    【讨论】:

    • 是的。我想等。我还想添加另一个 tst4.sql 在 2,3 完成后运行。这可能吗?
    • 为什么不将 tst2.sql 和 tst3.sql 连接到某个文件 (tmp.sql) 中,以便在 tst1.sql 和 tst4.sql 之后执行同步?除非这些文件非常大 (Gb),否则这是您将拥有的最简单的解决方案...
    • 能否请您详细说明如何使用同步?没有文件非常小。
    • 我的意思是同步。当您运行“sqlplus user1/pw @/home/scripts/tst1.sql”时,脚本在该过程完成之前不会移动到下一行...为什么要尝试并行运行 tst2 和 tst3? ...您真的想要 2 个并发进程访问数据库吗?
    • 需要并行运行 2,3 才能更快地完成作业,然后在完成后运行最后一个 sql。
    猜你喜欢
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2011-04-06
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多