Эта страница переведена машинным переводом. Читайте английский оригинал. English

Библиотека IBSurgeon

Как вызвать сбой сервера Firebird

Иногда необходимо вызвать сбой сервера Firebird, чтобы создать файл дампа или проверить надёжность вашей схемы резервного копирования/репликации, либо в целях отладки.

Чтобы спровоцировать сбой в Windows, вы можете использовать следующую UDF: badudf.dll.7z

Скачайте её, поместите в папку UDF и создайте .bat файл со следующим содержимым:

Code
@echo off
setlocal enabledelayedexpansion enableextensions

set fbc=C:\HQBird25.in
set dbnm=%~dp0tmptest.fdb.tmp
set usr=SYSDBA
set psw=masterkey

del  2>nul
echo create database 'localhost:!dbnm!' user '!usr!' password '!psw!'; | "!fbc!\isql.exe" -q -z

(
    echo set echo on;
    echo declare external function crashme
    echo returns int by value
    echo entry_point 'crashme' module_name 'badudf';
    echo commit;

    echo show function;

    echo select crashme(^) from rdb$database;
) > %~dp0tmptest.sql.tmp

"!fbc!\isql.exe" ^
    localhost:!dbnm! ^
    -q -i %~dp0tmptest.sql.tmp ^
    -user !usr! -pas !psw!
del !dbnm!
del %~dp0tmptest.sql.tmp

В скрипте присвойте переменной окружения fbc путь к папке Firebird, например

c:\Firebird25.in или C:\Firebird30

и ваши фактические логин и пароль суперпользователя (по умолчанию SYSDBA/masterkey) переменным usr и psw.

Скрипт создаст временную базу данных, зарегистрирует в ней UDF и выполнит «killer query», после чего удалит базу данных.

Результатом будет сбой Firebird, и если вы правильно настроили Windows Error Reporting, будет создан дамп процесса firebird.exe.

Пожалуйста, не регистрируйте BadUDF.dll в рабочей базе данных!

Также удалите её из папки UDF после эксперимента.