【问题标题】:How to verify sqlplus can connect?如何验证sqlplus可以连接?
【发布时间】:2017-04-11 23:11:49
【问题描述】:

我想知道是否有可能以某种方式获得sqlplus 输出以发现我的数据库是否已启动。

我想在数据库上运行脚本列表,但在此之前,我想知道数据库是否已启动并与我的脚本一起运行。

这是我尝试过的:

 sqlplus /@DB1 << EOF
 > select 1 from dual;
 > EOF

连接不上,但是sqlplus的返回码还是“一切正常”!

SQL*Plus:2016 年 11 月 28 日星期一 10:06:41 发布 11.2.0.4.0 生产版 版权所有 (c) 1982, 2013,甲骨文。版权所有。 错误: ORA-12505: TNS:listener 当前不知道连接中给出的 SID 描述符 输入用户名:SP2-0306:无效选项。 用法:CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]] 在哪里 ::= [/][@] ::= [][/][@] 输入用户名:ju@srv:/tmp/jcho $ echo $? 0

我知道我可以像这样 grep 测试查询的结果:

a.sh

sqlplus /@DB1 << EOF
  select 'ALL_GOOD_BOY' from dual;
EOF

调用:

如果连接正常,则提供1 行,否则提供0

$ a.sh |grep ALL_GOOD_BOY|wc -l

...这对我来说似乎有很多步骤。在“无法连接”给出“错误”返回码的模式下设置 sqlplus 的任何其他方式?

【问题讨论】:

标签: oracle unix sqlplus


【解决方案1】:

感谢@Kacper 提供的参考,我可以根据我的情况调整这个sqlplus /nolog;想法是这样的:

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

a.sh

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

还相关:Connect to sqlplus in a shell script and run SQL scripts

【讨论】:

    【解决方案2】:

    这是您可以使用的另一种解决方案: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多