Как проверить 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 к моему случаю; вот идея:

  1. открыть sqlplus только без подключения
  2. установить определенный код возврата на SQLERROR - вот что происходит, когда connect не
  3. код возврата можно собрать как обычно в скрипте вызывающего абонента:

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