2012-02-13 2 views
0

Я хотел бы узнать, работает ли моя база данных или нет из моего java-кода. Я не уверен, какой подход будет работать лучше всего. Наиболее очевидным является наличие потока, который периодически обследует базу данных. Другим подходом было бы использование триггеров. Я не очень разбираюсь в триггерах, но я знаю, что вы можете запускать триггер для обновлений, вставок и удалений. Но возможно ли запустить триггер, когда база данных не работает? Для меня нет смысла запускать триггер, когда база данных не работает.Проверьте, работает ли база данных или нет.

PS: В базе данных мы используем сейчас оракул, но я считаю, что такое же решение может быть применен к любой базе данных

Благодарности

ответ

2

Триггеры обычно серверные конструкции; поэтому, чтобы «запустить триггер», вам нужно было бы подключиться к БД, в первую очередь, что потребовало бы, чтобы он был вверх, что не помогает.

Какая у вас мотивация для "проверки работоспособности сервера"? Часто ли это приводит к сбою или вы пытаетесь быть чрезмерно осторожным, прежде чем выполнять вызов базы данных, который БД не разбилась или ваше сетевое соединение потеряно?

Если это вторая причина, если вы используете драйвер Java Oracle, вы получите только исключение из отказавшего вызова.

Вызовите свои вызовы, чтобы поймать эти исключения и повторите попытку подключения для повторного вызова. Таким образом, вам не нужно опробовать базу данных; вы просто отвечаете на (нечастое) событие, когда соединение мертво.

Если вы попробуете 5 или около того раз, чтобы повторно подключиться и не можете, вы можете уведомить вызывающего абонента о том, что база данных мертва, и отправить электронное письмо своему администратору или что-то в этом роде.

Здесь существует множество стратегий, но при том, что если вы пытаетесь обеспечить выполнение вызовов, просто подождите, пока драйвер java не сработает, и скажите вам вместо опроса сервера БД в отдельном потоке. Нет необходимости в этом.

+0

Я фактически создаю приложение панели мониторинга, которое позволяет людям просматривать статус каждого сервера. Поэтому мне нужно знать в реальном времени, если база данных отсутствует или нет. Если база данных не работает, мне сразу необходимо обновить статус в приложении панели мониторинга. – CuriousCoder

+0

О, хорошо; то да, просто опробуйте его, когда панель инструментов встанет или напишет простой сервер опроса, который пытается выполнить очень простую операцию в БД, например «SELECT * FROM user LIMIT 1» или какую-то такую ​​бессмыслицу, которая должна немедленно выполнить и вернуть. Поймайте все исключения из драйвера, обновите панель управления и сообщите, что сервер не работает. –

1

Если это приложение панели управления статусом, я бы предложил периодически (каждую минуту каждые 10 секунд?) Проверять каждый сервер базы данных, который вы контролируете. Если вы не можете пинговать устройство с помощью ICMP-пинга или пытаться открыть соединение с портом, это должен быть аварийный сигнал высокого уровня, указывающий на полный сбой оборудования или пробой сети. Если вы можете выполнить ping, попробуйте подключиться к порту базы данных. Если вы не можете, это указывает на сбой программного обеспечения.

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

Вы также можете попробовать контролировать загрузку ЦП и общую загрузку ЦП, количество используемого файла подкачки и т. Д., Чтобы оценить состояние вашего сервера.