2012-02-08 61 views
1

我们可以在shell脚本中有多个SQL * PLUS连接吗?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/[email protected] <<END1  
    COPY from srcUN/[email protected] to dstUN/[email protected] INSERT tab1 USING SELECT * FROM tab1 WHERE col1 = $1; 
    COPY from srcUN/[email protected] to dstUN/[email protected] INSERT tab2 USING SELECT * FROM tab2 WHERE col1 = $1; 
    END1 

    sqlplus -s srcUN/[email protected] <<END2 
     COPY from srcUN/[email protected] to dstUN/[email protected] INSERT tab3 USING SELECT * FROM tab3 WHERE col1 = $1; 
    END2 

#END 

你能帮我解决吗?

感谢, Savitha

+0

你的问题的标题有点误导 - 这看起来像一个shell脚本问题。如果您更改标题,您可能会收到更多的shell脚本专家。 – Jolta 2012-02-08 12:16:34

+0

谢谢Jolta。我已经改变了标题...希望它现在可行。 :) – Savitha 2012-02-08 12:22:38

回答

6

的问题是,END1END2因为他们前导空格不被识别为输入重定向结束。

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

+0

非常感谢Codo ... :) – Savitha 2012-02-09 11:55:32