2012-02-08 1 views
1

쉘 스크립트에서 여러 SQL * PLUS 연결을 사용할 수 있습니까?쉘 스크립트에서 SQL * PLUS 연결과 관련된 문제

SQL * PLUS의 COPY 명령을 사용하여 데이터베이스의 테이블 데이터를 다른 데이터베이스로 복사하는 쉘 스크립트를 작성했습니다. 데이터베이스 링크를 만들 권한이 없으므로 COPY 명령을 사용하고 있습니다.

약 50 개의 테이블 데이터를 복사해야합니다. 데이터 집합이 작 으면 모든 테이블의 데이터가 실행되고 복사됩니다. 그러나 데이터 세트가 거대 할 때, 멈추고 유닉스 기계에서 세션 비활성 메시지를 얻습니다.

나는 진술을 분할하고 아래와 같이 작성했다. 그러나 "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

질문의 제목이 다소 오해의 소지가 있습니다.이 질문은 쉘 스크립트 질문과 같습니다. 제목을 변경하면 더 많은 쉘 스크립트 전문가가이를 볼 수 있습니다. – Jolta

+0

감사합니다. Jolta. 나는 타이틀을 바꿨다 ... 이제는 효과가 있기를 바란다. :) – Savitha

답변

6

문제는 그들이 공백을 선도하고 있기 때문에 END1END2 입력 리디렉션의 끝으로 인식되지 않는 것입니다.

이 두 줄의 공백을 모두 제거하면 제대로 작동합니다.

+0

고맙습니다. Codo ... :) – Savitha