2

我正在尝试从 shell 脚本调用一个过程,该过程使用远程数据库的数据将大量插入到我的数据库中。所以,我在这里做的是通过 dblink 查询表并将该信息插入我的本地表中。

当我直接从数据库 IDE(如 Quest Toad 或 Oracle SQL Developer)执行此操作时,该过程运行时间不到 3 分钟。当我在 sqlplus 命令行中运行该过程时,也会在不到 3 分钟内运行。但是当我使用 shell 脚本调用该过程时,unix 中的进程挂起,在 oracle 服务器中产生一个高使用率的网络事件,并且数据库会话永远不会结束。

所以,这里的事情是我有另一个以与此相同的方式运行的程序,只有这会在我在 ksh 脚本中执行时引起问题。

下面,我使用两种方法从 ksh 脚本中的 sqlplus 调用该过程:

原脚本:

#!/usr/bin/ksh

PROFILE=/home/user/config/my_profile.sh
. ${PROFILE}
yesterday=$(TZ=GMT+24 date "+%d/%m/%Y")
echo "Establishing a DB connection"
/home/oraclei/product/11.1.0/bin/sqlplus<<END_OF_SQL
$USER/$PASSWD
execute MY_PROCEDURE@DB('$yesterday');
exit;
END_OF_SQL

选择:

#!/usr/bin/ksh

PROFILE=/home/user/config/my_profile.sh
. ${PROFILE}
echo "Establishing a DB connection"
yesterday=$(TZ=GMT+24 date "+%d/%m/%Y")
/home/oraclei/product/11.1.0/bin/sqlplus $USER/$PASSWD @/home/user/dblink_load/scripts/sql/load.sql $yesterday

以及它使用的 sql 脚本

exec MYSCHEMA.MY_PROCEDURE('&1');
quit;

过程中的查询是这样的:

insert into MYSCHEMA.mytable
(id, date, stat1, stat2, stat3)
(select
    id, date, max(stat1), avg(stat2), avg(stat3)
from
    tableA@dblink table1,
    tableB@dblink table2,
    tableC@dblink table3
where
    table1.date >= parameter and
    table1.id = table2.id and
    table2.id = table3.id
group by
    table1.id,
    table1.date);
4

0 回答 0