Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 过程挂起dblink中的查询表_Oracle_Shell_Unix_Sqlplus_Dblink - Fatal编程技术网

Oracle 过程挂起dblink中的查询表

Oracle 过程挂起dblink中的查询表,oracle,shell,unix,sqlplus,dblink,Oracle,Shell,Unix,Sqlplus,Dblink,我试图从一个shell脚本调用一个过程,该过程使用远程数据库的数据向我的数据库中进行大量插入。所以,我在这里做的是通过数据库链接查询表,并将这些信息插入到本地表中 当我直接从DB IDE(如Quest Toad或Oracle SQL Developer)执行此操作时,该过程运行不到3分钟。当我在sqlplus中运行该过程时,命令行也会在不到3分钟的时间内运行。但是,当我使用shell脚本调用该过程时,unix中的进程将挂起,在oracle server和db会话中产生高使用率的网络事件 所以,这

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

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

所以,这里的问题是,我有另一个过程以与此相同的方式运行,只有这样,当我在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
以及它使用的sql脚本

过程中的查询如下所示:


猜测:您的脚本没有相同的环境,无法正确连接到数据库?是否所有环境都使用相同的日期格式?您的参数每次转换的方式可能不同。您可以使用如下查询检查会话设置:
从dual中选择sys\u context('userenv','nls\u date\u format')@Randy no,我正在使用此脚本的副本调用同一数据库中的另一个过程,该过程通过同一个db链接进行查询,并且可以正常工作fine@jonearles本地和远程数据库都返回“DD/MM/RR”作为result@joeygs在Toad、SQL Developer或SQL*Plus中运行时会怎么样?在Oracle中,日期格式由客户端而不是服务器设置。
#!/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
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);