过程挂起在dblink中查询表

时间:2012-11-26 21:52:50

标签: oracle shell unix sqlplus dblink

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

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

所以,这里的问题是我有另外一个程序以与此相同的方式运行,只有这会导致我在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);

0 个答案:

没有答案