Shell 脚本中的 SQL* PLUS 连接问题
Posted
技术标签:
【中文标题】Shell 脚本中的 SQL* PLUS 连接问题【英文标题】:Issue with the SQL* PLUS connections in a Shell Script 【发布时间】: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 脚本专家。 谢谢乔尔塔。我已经更改了标题...希望它现在可以使用。 :) 【参考方案1】:问题在于END1
和END2
没有被识别为输入重定向的结尾,因为它们有前导空格。
删除这两行上的所有空格,它应该可以工作。
【讨论】:
以上是关于Shell 脚本中的 SQL* PLUS 连接问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UNIX shell 脚本中执行临时存储过程?是不是可以在 sql-plus 中使用 IF-ELSE/WHILE 循环?
从 python 运行 sql 脚本时如何仅抑制 SQL*Plus 横幅消息