【问题标题】:Issue with the SQL* PLUS connections in a Shell ScriptShell 脚本中的 SQL* PLUS 连接问题
【发布时间】:2012-02-08 12:13:42
【问题描述】:

我们可以在一个 shell 脚本中有多个 SQL* PLUS 连接吗?

我编写了一个 shell 脚本,使用 SQL* PLUS 的 COPY 命令将表的数据从一个数据库复制到另一个数据库。我没有创建数据库链接的权限,所以我使用的是 COPY 命令。

我需要复制大约 50 个表的数据。当数据集较小时,它会运行并复制所有表的数据。但是当数据集很大时,它会卡住,我会在 unix 机器上收到会话不活动消息。

我想拆分语句并写如下:但是我收到错误“SP2-0042:未知命令“END1” - 其余行被忽略。”和 "SP2-0042: 未知命令 "END" - 忽略行的其余部分。"

#!/bin/bash
export ORACLE_HOME=/ora00/app/oracle/product/9.2.0.8
export PATH=$PATH:$ORACLE_HOME/bin

args=$#

if [ $args == 1 ]
then
    echo "Shell script started"
else
    echo "Wrong number of arguments"
exit 1  
fi

time_start=`date +%H%M%S`
echo $time_start

    sqlplus -s srcUN/srcPwd@srcSID <<END1       
    COPY from srcUN/srcPwd@srcSID to dstUN/dstPwd@dstSID INSERT tab1 USING SELECT * FROM tab1 WHERE col1 = $1;
    COPY from srcUN/srcPwd@srcSID to dstUN/dstPwd@dstSID INSERT tab2 USING SELECT * FROM tab2 WHERE col1 = $1;
    END1

    sqlplus -s srcUN/srcPwd@srcSID <<END2 
        COPY from srcUN/srcPwd@srcSID to dstUN/dstPwd@dstSID INSERT tab3 USING SELECT * FROM tab3 WHERE col1 = $1;
    END2

#END

你能帮我解决这个问题吗?

谢谢, 萨维塔

【问题讨论】:

  • 你的问题的标题有点误导 - 这看起来像一个 shell 脚本问题。如果您更改标题,您可能会得到更多的 shell 脚本专家。
  • 谢谢乔尔塔。我已经更改了标题...希望它现在可以使用。 :)

标签: oracle shell sqlplus oracle9i


【解决方案1】:

问题在于END1END2 没有被识别为输入重定向的结尾,因为它们有前导空格。

删除这两行上的所有空格,它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2019-04-02
    • 2014-12-29
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多