Ta strona została przetłumaczona maszynowo. Przeczytaj oryginał angielski. English

Biblioteka IBSurgeon

Jak doprowadzić do awarii serwera Firebird

Czasami konieczne jest spowodowanie awarii silnika serwera Firebird, aby utworzyć plik zrzutu lub sprawdzić niezawodność schematu kopii zapasowej/replikacji, albo w celach debugowania.

Aby wywołać awarię w systemie Windows, możesz użyć następującej funkcji UDF: badudf.dll.7z

Pobierz ją, umieść w folderze UDF i utwórz plik .bat o następującej zawartości:

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

W skrypcie przypisz do zmiennej środowiskowej fbc ścieżkę do folderu Firebird, na przykład

c:\Firebird25.in lub C:\Firebird30

oraz swoje rzeczywiste dane logowania superużytkownika (domyślnie SYSDBA/masterkey) do zmiennych usr i psw.

Skrypt utworzy tymczasową bazę danych, zarejestruje w niej funkcję UDF i wykona “zapytanie zabójcę”, po czym usunie bazę danych.

Wynikiem będzie awaria Firebird, a jeśli poprawnie skonfigurowano raportowanie błędów systemu Windows, otrzymasz zrzut procesu firebird.exe.

Nie rejestruj BadUDF.dll w produkcyjnej bazie danych!

Po eksperymencie usuń go również z folderu UDF.