我需要验证数据库连接是否成功。
这是我的代码
report=`sqlplus -S /nolog << EOF
WHENEVER OSERROR EXIT 9;
WHENEVER SQLERROR EXIT SQL.SQLCODE;
connect <<username>>/<<Password>>@hostname:port
set linesize 1500
set trimspool on
set verify off
set termout off
set echo off
set feedback off
set heading on
set pagesize 0
spool extract.csv
<<My SQL Query>>
spool off;
exit;
EOF`
我已经尝试了基于线程Managing error handling while running sqlplus from shell scripts的以下选项,但它选择了第一个单元格值而不是连接状态。
if [ $report != 0 ]
then
echo "Connection Issue"
echo "Error code $sql_return_code"
exit 0;`enter code here`
fi
请告知。
答案 0 :(得分:1)
我需要类似的东西,但执行方式有点不同。
首先,我有list.txt,其中包含我想测试的数据库。我正在使用钱包连接,但可以对其进行编辑以保存用户名/密码。
LIST.TXT:
DB01 INSTANCE1.SCHEMA1
DB02 INSTANCE2.SCHEMA2
DB03 INSTANCE3.SCHEMA3
DB04 INSTANCE4.SCHEMA4
我有OK.sql,其中包含我想在每个数据库上运行的查询。
OK.sql:
select 'OK' from dual;
exit
最后,我用test.sh来读取list.txt,尝试连接并在每一行上运行OK.sql,并将结果记录在(drumroll)result.txt中。
test.sh:
. /etc/profile
rm result.txt
while read -r name wallet; do
echo "BEGIN-"$name
if (sqlplus -S /@$wallet @OK.sql < /dev/null | grep -e 'OK'); then
echo $name "GOOD" >> result.txt
else
echo $name "BAD" >> result.txt
fi
echo "END-"$name
done < list.txt
运行后检查你的result.txt。
的Result.txt:
DB01 BAD
DB02 GOOD
DB03 GOOD
DB04 GOOD
我希望这会有所帮助。