簡體   English   中英

從 shell 腳本連接到 oracle 數據庫

[英]Connect to oracle database from shell script

我正在嘗試從 shell 腳本連接到 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

當我嘗試直接從終端連接字符串進行連接時可以正常工作,但是從 shell 腳本中卻失敗了。 我得到的輸出是:

 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/abc@TEST_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...

壓縮 SQL*Plus 的所有有趣輸出並沒有幫助。 但在這種情況下,你有點用腳射擊自己。

您正在使用-s無提示標志,這意味着 SQL*Plus 不顯示橫幅,而且 - 至關重要的是 - 不顯示Connected to:消息。 你的grep永遠不會找到任何東西。

您可以通過在 shell 提示符下使用該標志運行它來檢查它; 你會看到類似的東西:

$ echo "exit" | sqlplus -S abc/abc@TEST_S
$

它只會返回到 shell 提示符,沒有輸出。

因此,如果您刪除該標志,則會顯示橫幅和消息,您可以檢查該消息。

我建議您將整個輸出捕獲在一個變量(或文件)中,使用 grep 來檢查連接是否成功,如果您認為有問題,請顯示輸出,以便您可以查看實際問題所在。 如果您遇到真正的問題,您目前無法分辨出真正的問題是什么。

ORACLE_HOME=PATH_TO_ORACLE

export ORACLE_HOME

PATH=$PATH:$ORACLE_HOME/bin

export PATH

sqlplus -s ${DBUSER}/${DBUSERPASSWORD}@//${HOST}:${PORT}/${SERVICE_NAME} <<EOF
set linesize 32767
set feedback off
set heading off

select * FROM dual;

EOF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM