我想知道是否有可能以某种方式得到sqlplus
输出,以发现我的数据库是否启动。
我想运行一个数据库上的脚本列表,但在我这样做之前,我想知道数据库是否启动并正在运行我的脚本。
这是我试过的:
sqlplus /@DB1 << EOF > select 1 from dual; > EOF
它不能连接,但sqlplus的返回码仍然说“一切OK”!
SQL * Plus:版本11.2.0.4.0生产于2016年11月28日星期一10:06:41 2016 版权所有(c)1982年,2013年,Oracle。 版权所有。 错误: ORA-12505:TNS:侦听器当前不知道在连接中给出的SID 描述 input用户名:SP2-0306:无效的选项。 用法:CONN [ECT] [{logon | / | proxy} [AS {SYSDBA | SYSOPER | SYSASM}] [edition = value]] where :: = [/] [@] :: = [] [/] [@] input用户名:ju @ srv:/ tmp / jcho $ echo $? 0
我知道我可以grep我的testing查询的结果,就像这样:
sqlplus /@DB1 << EOF select 'ALL_GOOD_BOY' from dual; EOF
如果连接有效,则给出1
行,否则为0
:
$ a.sh |grep ALL_GOOD_BOY|wc -l
…这对我来说似乎很多步骤。 任何其他方式设置sqlplus在“无法连接”的模式给出了“错误”的返回码?
感谢@Kacper给出的参考,我可以适应这个sqlplus /nolog
我的情况; 这里的想法是:
sqlplus
而不连接 SQLERROR
上设置特定的返回码 – connect
失败时会发生这种情况 sqlplus /nolog << EOF WHENEVER SQLERROR EXIT 50 WHENEVER OSERROR EXIT 66 connect /@${MISTERY_DB} exit; EOF
然后电话:
/ju $ export MISTERY_DB="eg_NON_EXISTING_DB" /ju $ a.sh SQL*Plus: Release 11.2.0.4.0 Production on Tue Nov 29 08:43:44 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. SQL> SQL> SQL> ERROR: ORA-12154: TNS:could not resolve the connect identifier specified /ju $ echo $? 50
还相关: 在shell脚本中连接到sqlplus并运行SQL脚本
下面是另一个可以使用的解决方案: WHENEVER SQLERROR sql.sqlcode
适用于我(在Oracle 11g上):
# try a simple SELECT FROM DUAL on previously defined database in var MY_DB sqlplus -s /@${MY_DB} << EOF whenever sqlerror exit sql.sqlcode; select 1 from dual; exit; EOF ERR_CODE=$? # then $? is loaded with error received if [[ 0 != "${ERR_CODE}" ]] ; then echo could not connect :\( else echo connection succeeded fi