我正在尝试在KornShell(ksh)协同进程中并行运行一堆脚本。其中一些脚本包含许多DDL语句。这些DDL语句被识别为独立的,并且针对不同的(以及大的/昂贵的,例如:3500万行及以上)数据库对象起作用。为了并行运行它们,我正在考虑用每个DDL语句创建单独的子脚本 - 这样我就可以说:SQL * Plus - 这将是很多:( - 导致过多的读写 - 因为它是一个批处理过程,所需的时间不是太关键但是(可能仍会导致在这个单一的磁盘并行执行环境中颠簸)..
我仍然不喜欢物理脚本扩散的想法。如果有办法从ksh调用解析器,那么我可以从一个相当大的脚本文件中提取出每个DDL / DML或任何其他语句以编程方式在后台进程中执行它们。任何想法?
答案 0 :(得分:0)
这会起作用吗?
cat DDL_statements | parallel -j20 --pipe -N 10 sql oracle://scott:tiger@server
这假定DDL_statements是1行长(如果它们不是1行长,举几个例子)。它并行运行20个作业,并以10个语句为单位启动它们。
它使用GNU Parallel(和GNU sql - GNU Parallel的一部分)。