gpt4 book ai didi

oracle - 从 shell 脚本连接到 oracle 数据库

转载 作者:行者123 更新时间:2023-12-05 00:19:11 26 4
gpt4 key购买 nike

我正在尝试从 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 - 从 shell 脚本连接到 oracle 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36478260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com