Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从shell脚本连接到oracle数据库_Oracle_Shell - Fatal编程技术网

从shell脚本连接到oracle数据库

从shell脚本连接到oracle数据库,oracle,shell,Oracle,Shell,我正在尝试从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)

我正在尝试从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不显示横幅,关键是不显示连接到:消息的
。你的
grep
永远找不到任何东西

您可以通过在shell提示符下使用该标志运行它来检查这一点;您将看到如下内容:

$ echo "exit" | sqlplus -S abc/abc@TEST_S
$
它将返回shell提示符,没有输出

因此,如果您删除该标志,将显示横幅和消息,您可以检查消息

我建议您将整个输出捕获到一个变量(或文件)中,grep检查连接是否成功,如果您认为存在问题,请显示输出,以便您可以看到实际的错误。如果你有一个真正的问题,你目前无法判断到底是什么问题。

ORACLE\u HOME=PATH\u to\u ORACLE
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
导出甲骨文主页 PATH=$PATH:$ORACLE\u HOME/bin 导出路径
sqlplus-s${DBUSER}/${DBUSERPASSWORD}@/${HOST}:${PORT}/${SERVICE_NAME}我删除了grep和-s参数。将输出重定向到文件,并添加了grep以检查连接是否成功,结果成功。不确定到底是谁使脚本工作,因为我并没有更改连接字符串中的任何内容。我得到的最初错误与错误的用户名/密码有关,这很奇怪,因为它与此无关。无论如何,我把这个答案标为正确答案。谢谢:)它以前可能已经成功连接,但是-s表示您没有看到
连接到
消息,即使它工作正常,因此grep失败。