Проблема с соединениями SQL * PLUS в сценарии оболочки - PullRequest
1 голос
/ 08 февраля 2012

Можем ли мы иметь несколько соединений SQL * PLUS в сценарии оболочки?

Я написал сценарий оболочки для копирования данных таблиц из одной базы данных в другую с помощью команды COPY SQL * PLUS. У меня нет прав для создания ссылки на базу данных, поэтому я использую команду 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

Не могли бы вы помочь мне решить эту проблему?

Спасибо, САВИТА

1 Ответ

6 голосов
/ 08 февраля 2012

Проблема в том, что END1 и END2 не распознаются как конец перенаправления ввода, поскольку они имеют начальные пробелы.

Удалите все пробелы в этих двух строках, и это должно работать.

...