2012-02-08 74 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