如何validationsqlplus可以连接?

我想知道是否有可能以某种方式得到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我的情况; 这里的想法是:

  1. 打开sqlplus而不连接
  2. SQLERROR上设置特定的返回码 – connect失败时会发生这种情况
  3. 返回代码可以照常在调用者脚本中收集:

 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