如何验证sqlplus可以连接?
How to verify sqlplus can connect?
我想知道是否有可能以某种方式获得 sqlplus
输出以发现我的数据库是否已启动。
我想 运行 数据库中的脚本列表,但在我这样做之前,我想知道数据库是否启动以及 运行 我的脚本。
这是我尝试过的:
sqlplus /@DB1 << EOF
> select 1 from dual;
> EOF
连接不上,但是sqlplus的return代码还是说“一切正常”!
SQL*加:2016 年 11 月 28 日星期一发布 11.2.0.4.0 生产 10:06:41
版权所有 (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
...这对我来说似乎很多步骤。在“无法连接”给出“错误”return 代码的模式下设置 sqlplus 的任何其他方法?
感谢@Kacper 提供的参考,我可以根据我的情况调整此 sqlplus /nolog
;想法是这样的:
- 只打开
sqlplus
不连接
- 在
SQLERROR
上设置特定的 return 代码 - 这就是 connect
失败时发生的情况
- return 可以在调用脚本中像往常一样收集代码:
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
这是您可以使用的另一个解决方案: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
我想知道是否有可能以某种方式获得 sqlplus
输出以发现我的数据库是否已启动。
我想 运行 数据库中的脚本列表,但在我这样做之前,我想知道数据库是否启动以及 运行 我的脚本。
这是我尝试过的:
sqlplus /@DB1 << EOF
> select 1 from dual;
> EOF
连接不上,但是sqlplus的return代码还是说“一切正常”!
SQL*加:2016 年 11 月 28 日星期一发布 11.2.0.4.0 生产 10:06:41 版权所有 (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
...这对我来说似乎很多步骤。在“无法连接”给出“错误”return 代码的模式下设置 sqlplus 的任何其他方法?
感谢@Kacper 提供的参考,我可以根据我的情况调整此 sqlplus /nolog
;想法是这样的:
- 只打开
sqlplus
不连接 - 在
SQLERROR
上设置特定的 return 代码 - 这就是connect
失败时发生的情况 - return 可以在调用脚本中像往常一样收集代码:
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
这是您可以使用的另一个解决方案: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