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:
@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.