Использование sqlplus для программной проверки соединения - PullRequest
1 голос
/ 01 февраля 2012

Можно ли использовать sqlplus для программной проверки соединения с базой данных (в частности, учетной записи SYS)?

Я думаю что-то вроде этого

  1. Запуск sql plus(используя Process.Start) с некоторым параметром, задавая имя пользователя и пароль sys
  2. Проверьте код выхода (или даже стандартный вывод), независимо от того, успешен он или нет.Наилучший способ, который я могу найти, - это проверить строку stdout, существует ли подстрока «ОШИБКА», но я не думаю, что она очень чистая

Возможно ли это?Какой параметр вы предлагаете мне использовать?Причина, по которой я хочу это сделать, заключается в том, что System.Data.OracleClient не поддерживает соединение как SYSDBA

Ответы [ 3 ]

2 голосов
/ 01 февраля 2012

Это может работать

whenever sqlerror exit failure
whenever oserror exit failure
conn user/pwd@db-name
select 'success' from dual;
exit

Приведенный выше сценарий будет иметь следующее поведение:

  • Процесс sqlplus вернет ненулевой код, если произошла ошибка
  • В противном случае sqlplus вернет ноль

Обратите внимание, что я не проверял выше.

Поправка

Сценарий должен быть запущенв unix:

sqlplus -nolog @script-file.sql

и в windows:

sqlplus /nolog @script-file.sql
1 голос
/ 01 февраля 2012

Вам не нужно получать сеанс, чтобы проверить, работает ли соединение.

Если вы попытаетесь получить доступ к базе данных, используя неверные учетные данные, вы получите ошибку ORA-01017.Если соединение недоступно или прослушиватель работает, но база данных не смонтирована (т. Е. Он не может проверить учетные данные, даже если он может подключиться), вы получите другой код ошибки.

См. ТакжеСценарий Nagios check_oracle_v2 для примера.

0 голосов
/ 06 июня 2017

У меня был аналогичный вопрос . Я обнаружил, что мы можем указать, какой код ошибки может быть отправлен в зависимости от случая:

sqlplus /nolog << EOF
 WHENEVER SQLERROR EXIT 50
 WHENEVER OSERROR EXIT 66
 connect /@${MISTERY_DB}
 exit;
EOF

Затем, чтобы проверить код возврата:

RET_CODE=$?
if [ ${RET_CODE} -eq 50 ] ; then
  echo "it was an SQLERROR"
fi
...