2016-04-07 29 views
1

シェル・スクリプトからoracleデータベースに接続しようとしています。シェル・スクリプトからoracleデータベースに接続してください

#!/bin/bash 
# Shell script to run sql files from command line. 
# Pre-Req: sqlplus client shall be installed already. 
########################################################### 
# Variables Section (DB Details) 
########################################################### 
driverClassName=oracle.jdbc.driver.OracleDriver 
url="(description=(address_list=(address=(protocol=TCP)(host=oradb.test.env.org)(port=1521)))(connect_data=(service_name=TEST_S)))" 
DB_UserName="abc" 
DB_Password="abc" 
LogDirectory="/var/tmp/logs" 
DataDirectory="/var/tmp/data" 
DB_HostName="oradb.test.env.org" 
DB_Port="1521" 
DB_SID="KONTOR" 
DIR_SqlFiles="C:\git\sql" 
########################################################## 
# All Script Functions Goes Here 
########################################################## 


db_statuscheck() { 
    echo "`date` :Checking DB connectivity..."; 
    echo "`date` :Trying to connect "${DB_UserName}"/"${DB_Password}"@"${DB_SID}" ..." 
    echo "exit" | sqlplus -S ${DB_UserName}/${DB_Password}@${url} | grep -q "Connected to:" > /dev/null 
    if [ $? -eq 0 ] 
    then 
    DB_STATUS="UP" 
    export DB_STATUS 
    echo "`date` :Status: ${DB_STATUS}. Able to Connect..." 
    else 
    DB_STATUS="DOWN" 
    export DB_STATUS 
    echo "`date` :Status: DOWN . Not able to Connect." 
    echo "`date` :Not able to connect to database with Username: "${DB_UserName}" Password: "${DB_Password}" DB HostName: "${DB_HostName}" DB Port: "${DB_Port}" SID: "${DB_SID}"." 
    echo "`date` :Exiting Script Run..." 
    exit 
    fi 
} 

Main() { 
    echo "`date` :Starting Sql auto run script." 
    db_statuscheck 
    echo "`date` :Sql auto run script execution completed." 
} 

Main | tee autosql.log 

ターミナル接続文字列から直接接続しようとすると、シェルスクリプトから直接接続しようとすると失敗します。私が得ている出力は次のとおりです。

7. apr 2016 15:18:09 :Starting Sql auto run script. 
7. apr 2016 15:18:09 :Checking DB connectivity... 
7. apr 2016 15:18:09 :Trying to connect abc/[email protected]_S ... 
7. apr 2016 15:18:09 :Status: DOWN . Not able to Connect. 
7. apr 2016 15:18:09 :Not able to connect to database with Username: abc abc Password: kjopsprosesser_utv4 DB HostName: oradb.test.env.orgDB Port: 1521 SID: TEST_S 
7. apr 2016 15:18:09 :Exiting Script Run... 

答えて

3

SQL * Plusの興味深い出力をすべて縮退しているとは限りません。しかし、この場合、あなたは少し足で自分を撃っています。

-sサイレント・フラグを使用しています。つまり、SQL * Plusはバナーを表示せず、 - 重要なこと - Connected to:メッセージを表示しません。あなたのgrepは決して何も見つけるつもりはありません。

これは、シェルプロンプトからそのフラグを指定して実行することで確認できます。

$ echo "exit" | sqlplus -S abc/[email protected]_S 
$ 

出力されずにシェルプロンプトに戻ります。

フラグを削除すると、バナーとメッセージが表示され、メッセージを確認できます。

私はgrepのは、成功した接続を確認するために、あなたは変数(またはファイル)で全体の出力をキャプチャすることをお勧めしたい、とあなたが実際に間違っているものを見ることができるように出力を表示し、問題があると思います。あなたが本物の問題を抱えているなら、現在何が実際に間違っているのかを知る方法がありません。

+0

grepと-Sパラメータを削除しました。出力をファイルにリダイレクトし、grepを追加して接続が正常に行われたことを確認しています。私は接続文字列で何も変更していないので、誰がスクリプトを動作させるのかは正確にはわかりません。私が得ているオリジナルのエラーは間違ったユーザ名/パスワードに関連していました。これはそれと関係がないので奇妙です。とにかく私はこの答えを正しいものとしてマークしています。ありがとう:) – Sanja

+0

以前は正常に接続されていた可能性がありますが、-sは動作していても 'Connected to 'メッセージが表示されなかったため、grepが失敗しました。 –

関連する問題