运行 多个并行 sqlplus 连接在一段时间内 bash
Running multiple parallel sqlplus connections for a certain period of time in bash
我有这段代码可以创建 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 时间内保持一定数量的连接。
有什么我可以添加到这段代码来实现我需要的吗?
一个小时内的循环,参见
runsql() {
i=""
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
解释:
底部的主循环在后台启动函数 runsql
20 次。
函数 runsql
可以在任何地方使用 </code>,我将它复制到 <code>i
以获得看起来像原始代码的代码。
SECONDS 是一个计数器,由 shell 每秒更改一次,因此我们不需要调用 date
.
3600是一个小时
在 (( .. ))
中,您可以在变量前面没有 $
的情况下进行数学运算。
我有这段代码可以创建 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 时间内保持一定数量的连接。
有什么我可以添加到这段代码来实现我需要的吗?
一个小时内的循环,参见
runsql() {
i=""
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
解释:
底部的主循环在后台启动函数 runsql
20 次。
函数 runsql
可以在任何地方使用 </code>,我将它复制到 <code>i
以获得看起来像原始代码的代码。
SECONDS 是一个计数器,由 shell 每秒更改一次,因此我们不需要调用 date
.
3600是一个小时
在 (( .. ))
中,您可以在变量前面没有 $
的情况下进行数学运算。