在 bash 中运行多个并行 sqlplus 连接一段时间



我有这段代码,它创建了 20 个并行 sqlplus 实例,执行一些查询和退出:

#!/bin/sh
for i in $(seq 1 20);
do
echo "CREATE TABLE table_$i (id NUMBER NOT NULL);
select * from table_$i;
! sleep 30
select * from table_$i;
! sleep 30
DROP TABLE table_$i;" | sqlplus system/password &
done
wait

如果可能的话,我需要调整此代码,以便在以下条件下运行一个小时:

始终保持 20 个连接,如果一个 sqlplus 实例关闭(完成它的进程(,另一个应该打开,我需要在 X 时间内保持一定数量的连接。

我可以在此代码中添加任何内容以实现我需要的吗?

有关一小时循环的信息,请参阅 https://stackoverflow.com/a/22735757/3220113

runsql() {
i="$1"
end=$((SECONDS+3600))
SECONDS=0
while (( SECONDS < end )); do
# Do what you want.
echo "CREATE TABLE table_$i (id NUMBER NOT NULL);
select * from table_$i;
! sleep 30
select * from table_$i;
! sleep 30
DROP TABLE table_$i;" | sqlplus system/password 
sleep 1 # precaution when sqlplus fails, maybe wrong password
done
}
for i in $(seq 1 20); do
runsql $i &
done
wait

说明:
底部的主循环在后台启动函数runsql20次。
runsql可以在任何地方使用$1函数,我将其复制到i以获取看起来像原始代码的代码。
秒是一个由 shell 每秒更改的计数器,因此我们不需要调用date.
3600是一个小时。
(( .. ))里面,你可以在变量面前不$的情况下做数学运算。

最新更新