从shell脚本运行sqlplus时的错误处理

时间:2015-12-21 19:48:18

标签: unix sqlplus

我需要验证数据库连接是否成功。

这是我的代码

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

请告知。

1 个答案:

答案 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

我希望这会有所帮助。