13 авг. 2011 г.

Применение SELECT FROM SELECT

Конструкция SELECT FROM SELECT замечательная вещь. Вот здесь приведено решение задачи поиска строк, содержащих все заданные слова в любой последовательности.

5 авг. 2011 г.

Логирование и отображение исключений

Начиная с версии 2.5.12 необработанные исключения отображаются вместе с наименованием модуля, номером строки исходного кода и стеком вызова:


Для этого в gedemin.exe должна быть залинкована отладочная информация. Ежедневно собираются и выкладываются на сайт два архива -- Гедымин с отладочной информацией и без.

Вместе с выводом на экран информация об исключениях заносится в таблицу GD_JOURNAL и может быть просмотрена в окне Просмотр событий (раздел Исследователь - Сервис - Администратор). Отфильтровать нужные записи можно по полю source, которое будет содержать слова Exception или Macros Exception.

Код Exceptional Magic, отвечающий за обработку исключений, включается в проект через символ условной компиляции EXCMAGIC_GEDEMIN. К сожалению, данный продукт не является open source. Поэтому вы не найдете его в публичных исходниках Гедымина. При необходимости, Вы можете самостоятельно купить исходный код Exceptional Magic. Выложить файлы в папку Gedemin\Log, определить вышеуказанный символ и перекомпилировать весь проект.

2 авг. 2011 г.

Обновление сервера Firebird 2.5 из снэпшота

Внимание! Нижесказанное относится к ситуации, когда сервер Fierbird 2.5.x обновляется новейшей сборкой 2.5.x. Если вы до сих пор работаете на Yaffil, Firebird 1.x, 2.0.x или 2.1.x, то сначала необходимо осуществить процедуру перехода на 2.5.

На сайте firebirdsql.org регулярно обновляются текущие "snapshot" сборки сервера, включающие все последние изменения. Файлы Windows версии 2.5.х можно скачать отсюда. Архивы доступны в формате Zip и 7-Zip, для 32-х и 64-х битных версий ОС. Буквы PDB в имени архива означают, что он содержит сервер, откомпилированный с отладочной информацией.

Обновить работающий сервер на предприятии можно следующим образом:

  1. Делаем архивную копию базы данных и сохраняем ее в надежном месте.
  2. Скачиваем архив с текущей сборкой.
  3. Все пользователи закрывают у себя Гедымин. Если Гедымин работает, а соответствующий пользователь недоступен (вышел покурить, отошел на обед и т.п.), то:
    1. в окне Подключенные пользователи последовательно отключаем активные коннекты или в SQL редакторе выполняем команду DELETE FROM mon$attachments.
    2. если не помогло: на сервере отключаем сетевое соединение или просто выдергиваем кабель локальной сети (не 220В!) из компьютера. Ждем 4-5 минут, пока не отвалятся все коннекты. Если используется версия сервера классической архитектуры, то смотрим в Диспетчер задач, пока там не останется только один процесс fb_inet_server.

    Первый вариант предпочтительнее, но практика показывает, что на крупном предприятии трудно оповестить всех пользователей о том, что не следует загружать Гедымин. В результате, после обрыва соединения пользователь пытается запустить программу снова и снова. В таком случае, второй вариант, с выдергиванием сетевого кабеля, остается единственным решением.

  4. Убедившись, что все пользователи отключены, заходим в Управление компьютером, Службы и останавливаем Firebird.

    Ни в коем случае нельзя снимать задачу fb_inet_server или fbserver через Диспетчер задач. Такое действие может привести к повреждению файла базы данных (особенно, если отключен режим принудительной записи). Если все же в процессе работы сервера пришлось произвести принудительную перезагрузку, выключение или остановку задачи, то после восстановления работоспособности, первым делом следует проверить файл базы данных командой gfix.

  5. Заменяем файлы в папке C:\Program Files\Firebird содержимым архива. Кроме файла security2.fdb! Его не трогаем.

    Если вы случайно затерли security2.fdb, то придется подключиться Гедымином под учетной записью Administrator и в разделе Исследователь-Сервис-Администратор-Пользователи, на панели инструментов выбрать команду Пересоздать всех пользователей.

  6. Cкачиваем отсюда актуальную библиотеку GUDF.DLL (в соответствии с разрядностью вашей операционной системы) и заменяем ею существующий файл в подкаталоге UDF.
  7. Запускаем службу.
  8. Восстанавливаем сетевое соединение.
Посмотреть версию сервера можно в Гедымине: в главном меню выбрать команду О программе....

После обновления сервера рекомендуется провести бэкап-рестор базы данных и обновить клиентскую библиотеку -- файл fbclient.dll.