我正在尝试编写一个shell脚本来检查数据库连接。在我的脚本中,我使用命令
sqlplus uid/pwd@database-schemaname
连接到我的Oracle数据库。
现在我想在临时文件中保存此命令生成的输出(在它下降到SQL提示符之前),然后从该文件中grep / find字符串“Connected to”以查看连接是否正常。
任何人都可以帮我抓住输出并退出提示并测试连接是否正常?
答案 0 :(得分:25)
使用这样的脚本:
#!/bin/sh
echo "exit" | sqlplus -L uid/pwd@dbname | grep Connected > /dev/null
if [ $? -eq 0 ]
then
echo "OK"
else
echo "NOT OK"
fi
echo“exit”确保您的程序立即退出(这会通过管道传输到sqlplus)。 -L确保如果凭据不正确,sqlplus将不会要求输入密码(这会使其卡住)。
(> / dev / null只隐藏grep的输出,我们不需要,因为在这种情况下通过$?访问结果)
答案 1 :(得分:2)
您可以通过执行以下操作来避免SQL提示:
sqlplus uid/pwd@database-schemaname < /dev/null
SqlPlus立即退出。
现在只需将上面的输出格式化为:
if sqlplus uid/pwd@database-schemaname < /dev/null | grep 'Connected to'; then
# have connectivity to Oracle
else
# No connectivity
fi
答案 2 :(得分:1)
#!/bin/bash
output=`sqlplus -s "user/pass@POLIGON.TEST " <<EOF
set heading off feedback off verify off
select distinct machine from v\\$session;
exit
EOF
`
echo $output
if [[ $output =~ ERROR ]]; then
echo "ERROR"
else
echo "OK"
fi
答案 3 :(得分:1)
#! /bin/sh
if echo "exit;" | sqlplus UID/PWD@database-schemaname 2>&1 | grep -q "Connected to"
then echo connected OK
else echo connection FAIL
fi
不知道“已连接到”消息是否被置于标准输出或标准错误,这将检查两者。 “qrep -q”而不是“grep ...&gt; / dev / null”假设Linux。
答案 4 :(得分:1)
#!/bin/sh
echo "exit" | sqlplus -S -L uid/pwd@dbname
if [ $? -eq 0 ]
then
echo "OK"
else
echo "NOT OK"
fi
对于连接验证-S就足够了。
“静音”模式不会阻止端子输出。它所做的就是:
-S Sets silent mode which suppresses the display of
the SQL*Plus banner, prompts, and echoing of
commands.
如果要抑制所有终端输出,则需要执行以下操作:
sqlplus ... > /dev/null 2>&1
答案 5 :(得分:0)
这是一个很好的选择,它不会在命令行上公开密码
#!/bin/bash
CONNECT_STRING=<USERNAME>/<PASS>@<SID>
sqlplus -s -L /NOLOG <<EOF
whenever sqlerror exit 1
whenever oserror exit 1
CONNECT $CONNECT_STRING
exit
EOF
SQLPLUS_RC=$?
echo "RC=$SQLPLUS_RC"
[ $SQLPLUS_RC -eq 0 ] && echo "Connected successfully"
[ $SQLPLUS_RC -ne 0 ] && echo "Failed to connect"
exit SQLPLUS_RC
答案 6 :(得分:0)
所提出的解决方案均不适合我,因为我的脚本是在运行多个国家/地区且具有不同语言环境的计算机中执行的,我不能简单地检查一个String就是因为另一台计算机中的此字符串已翻译成另一种语言。作为解决方案,我正在使用SQLcl
https://www.oracle.com/database/technologies/appdev/sqlcl.html
与所有sql * plus脚本兼容,并允许您像这样测试数据库连接:
echo "disconnect" | sql -L $DB_CONNECTION_STRING > /dev/null || fail "cannot check connectivity with the database, check your settings"
答案 7 :(得分:0)
这是我的Docker容器的一线工具,可以等到数据库准备就绪:
until sqlplus -s sys/Oracle18@oracledbxe/XE as sysdba <<< "SELECT 13376411 FROM DUAL; exit;" | grep "13376411"; do echo "Could not connect to oracle... sleep for a while"; sleep 3; done
多行相同:
until sqlplus -s sys/Oracle18@oracledbxe/XE as sysdba <<< "SELECT 13376411 FROM DUAL; exit;" | grep "13376411";
do
echo "Could not connect to oracle... sleep for a while";
sleep 3;
done
因此,它基本上会选择魔术数字并检查是否确实返回了正确的数字。