我想知道是否有可能以某种方式获取sqlplus
输出,以发现我的数据库是否已启动。
我想在数据库上运行脚本列表,但是在执行此操作之前,我想知道数据库是否已启动并使用我的脚本运行。
这是我尝试过的:
sqlplus /@DB1 << EOF
> select 1 from dual;
> EOF
它无法连接,但是sqlplus的返回代码仍然显示“一切正常”!SQL*Plus: Release 11.2.0.4.0 Production on Mon Nov 28 10:06:41 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-12505: TNS:listener does not currently know of SID given in connect descriptor Enter user-name: SP2-0306: Invalid option. Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]] where ::= [/][@] ::= [][/][@] Enter user-name: ju@srv:/tmp/jcho $ echo $? 0
I know I could grep the result of my test query, like that:
a.sh
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
也相关:Connect to sqlplus in a shell script and run SQL scripts
关于oracle - 如何验证sqlplus是否可以连接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40840765/