Как проверить sqlplus может подключиться?
Я хотел бы знать, можно ли получить 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
Я знаю, что могу grep результат моего тестового запроса, например что:
a.ш
sqlplus /@DB1 << EOF
select 'ALL_GOOD_BOY' from dual;
EOF
звоните:
дает 1
линия, если соединение работает,0
иначе:
$ a.sh |grep ALL_GOOD_BOY|wc -l
... Мне кажется, что это много шагов. Любой другой способ установить sqlplus в режиме, где "невозможно подключиться "дает код возврата" ошибка"?
2 ответов
благодаря ссылке, данной @Kacper, я мог бы адаптировать это sqlplus /nolog
к моему случаю; вот идея:
- открыть
sqlplus
только без подключения - установить определенный код возврата на
SQLERROR
- вот что происходит, когдаconnect
не - код возврата можно собрать как обычно в скрипте вызывающего абонента:
a.ш
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
также по теме: подключитесь к sqlplus в сценарии оболочки и запустите 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