Существует ли инструмент, который может проверить доступность базы данных Oracle 11g на удаленной машине? - PullRequest
1 голос
/ 13 февраля 2012

Я настраиваю последовательность загрузки на компьютере с Linux, и одно из запускаемых приложений зависит от того, доступен ли экземпляр Oracle на другом компьютере.Я хотел бы, чтобы инструмент сценариев bash проверял наличие экземпляра Oracle.Вероятно, кнопка питания на обоих полях будет нажата в течение нескольких секунд, и мне нужно завершить более длительный процесс Oracle, прежде чем мое приложение попытается подключиться.


РЕДАКТИРОВАТЬ: у меня нетOracle установил не тонкий JDBC-jar, и предпочел бы не устанавливать его на клиентском компьютере.

Ответы [ 3 ]

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

Вы можете написать простой скрипт, который использует цикл for для проверки порта оракула, используя nc. Примерно так:

#!/bin/bash
for i in `seq 1 10`
do
    nc oracle_server oracle_port -w 2
    res=$?
    if [ $res -eq 0 ] ; then
        echo "OK"
        exit 0
    else
        echo "Sleeping for 5 second and retry"
        sleep 5
    fi
done

Вы можете настроить количество итераций цикла и время ожидания (-w 2 и sleep 5).

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

Первое, что нужно попробовать - это tnsping, который сообщит вам, работает ли слушатель. Если прослушиватель работает, вы можете просто попытаться подключиться к экземпляру и запустить, например, select 1 from dual. Вы можете сделать это в командной строке, используя sqlplus. В зависимости от того, как настроена ваша база данных Oracle (и какие опции вы приобрели), SNMP также может быть опцией.

Вы также можете сделать так, чтобы ваше приложение лучше обрабатывало базу данных, которая еще не запущена (но, например, спит 10 секунд и пытается снова).

Кроме того, вы можете рассмотреть возможность использования коммутируемого PDU (например, такого как APC) для управления порядком загрузки машин после восстановления питания. Если вам нужны ответы других системных администраторов (поскольку они все решили эту проблему), я предлагаю задать вопрос об ошибке сервера.

в ответ на ваши изменения:

Если вы не хотите устанавливать Oracle Client, у вас не будет sqlplus или tnsping. Вместо этого просто напишите тривиальную Java-программу, чтобы попытаться подключиться к базе данных с помощью тонких драйверов JDBC. Если вы можете подключиться, попробуйте select 1 from dual. Если это работает, то Oracle работает. Если вместо этого вы получаете сбои или исключения, значит, он не работает.

1 голос
/ 13 февраля 2012

Единственный способ убедиться в том, что удаленная база данных работает, а прослушиватель работает и что база данных правильно зарегистрирована с прослушивателем, - это фактически установить соединение.Вы можете использовать утилиту SQL * Plus (при условии, что на компьютере с Linux установлен ваш клиент Oracle), чтобы попытаться установить соединение.Что-то вроде

Создайте файл check_db_up.sql

whenever sqlerror exit 1;
connect username/password@<<TNS alias>>
select 1 from dual;
exit 0;

Затем вызовите этот скрипт в вашем скрипте bash shell и посмотрите код возврата

sqlplus /nolog @check_db_up.sql

Если это вернет1, произошла ошибка и база данных не работает.Если он возвращает 0, база данных работает и принимает подключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...