Główna / Pomoc / Uszkodzenie bazy danych

Uszkodzenie bazy danych

Uszkodzenie bazy danych

Jedynym dobrym rozwiązaniem problemu uszkodzonej bazy danych jest przywrócenie bazy z kopii zapasowej.

Choć istnieje możliwość “naprawy” bazy danych wbudowanym narzędziem Firebirda (gfix.exe), to nie gwarantuje to zachowania integralności danych.
Uszkodzone rekordy są w tym przypadku usuwane, więc istnieje zagrożenie, że zostaną usunięte np. SAD-y wpisane do rejestru lub inne ważne dane.

Jedynie przywrócenie bazy z najbardziej aktualnej nieuszkodzonej kopii daje szansę na uratowanie możliwie jak największej ilości danych.

Przed przywróceniem bazy z kopii można wykonać ręczną kopię pliku z bazą danych (przy wyłączonych wszystkich programach korzystających z bazy!). W razie potrzeby z uszkodzonej bazy będzie można wyciągnąć dokumenty utworzone po wykonaniu kopii zapasowej.

Dokumenty, które zostały utworzone po wykonaniu kopii zapasowej można zapisać do plików (mogą to być SAD-y, komunikaty z modułu email itd.) i wczytane do programu po przywróceniu bazy z kopii.

Przyczyny uszkodzenia baz

Po usunięciu problemu należy bezwzględnie zastanowić się nad przyczyną uszkodzenia bazy, a więc:

  • zapytać użytkowników, czy nie zamykali niepoprawnie programu lub komputera;
  • sprawdzić dysk twardy pod kątem błędów;
  • sprawdzić czy program antywirusowy jest dobrze skonfigurowany (zobacz szczegóły); nieprawidłowo skonfigurowany program antywirusowy jest częstym powodem uszkodzenia baz.

Zobacz inne przyczyny uszkodzenia baz: ibsurgeon.com/articles/item70.

Dla zaawansowanych

Firebird posiada wbudowane narzędzie do naprawiania baz danych. Jak napisano powyżej, uszkodzone rekordy są usuwane z bazy, więc naprawa bazy narzędziami Firebirda nie gwarantuje zachowania integralności danych.

Opisane niżej czynności należy wykonywać na serwerze (na komputerze, na którym zainstalowany jest Firebird i gdzie znajdują się bazy danych).

Naprawę bazy należy wykonywać na kopii pliku (aby omyłkowo nie uszkodzić oryginału). Przed wykonaniem naprawy należy koniecznie zamknąć wszystkie programy korzystające z bazy danych – inaczej plik bazy zostanie jeszcze bardziej uszkodzony.

Narzędzie gfix.exe umożliwia wykonanie naprawy bazy.
Gfix uruchomiony z opcją -validate sprawdza uszkodzenia bazy, natomiast uruchomiony z opcją -mend oznacza uszkodzone rekordy jako niepoprawne (będą one pomijane podczas archiwizacji bazy).

Narzędzie gbak.exe służy do wykonywania kopii zapasowych (z opcją -backup_database) oraz przywracania bazy z kopii (z opcją -create_database).

Naprawa bazy polega na oznaczeniu rekordów jako uszkodzone poprzez gfix, a następnie wykonaniu kopii zapasowej i przywróceniu bazy z kopii.

Przykładowy skrypt .bat służący do naprawiania baz danych:

cd C:\Program Files\Firebird\Firebird_2_1_5\bin

@set baza=127.0.0.1:C:\baza_danych.FDB

@set kopia=C:\kopia_zapasowa.gbk

gfix %baza% -validate -full -user SYSDBA -password masterkey
gfix %baza% -mend -full -ignore -user SYSDBA -password masterkey

gbak %baza% %kopia% -backup_database -v -g -l -user SYSDBA -password masterkey
gbak %kopia% %baza% -create_database -rep -v -p 4096 -k -user SYSDBA -password masterkey

Komendy można wykonywać pojedynczo (dodając “rem” na początku niektórych linii, aby wyłączyć wiersze, które mają nie być wykonane), dzięki czemu będzie można kontrolować wyniki wykonywanych operacji. Można najpierw wykonać sprawdzenie bazy, a dopiero potem backup oraz restore.

Jeżeli tak wykonana naprawa bazy nie uda się (czasami się tak zdarza), wówczas pozostają jeszcze dwie możliwości.

1. Można przepompować bazę danych za pomocą naszego programu Pompa. Program Pompa przepisuje rekordy z jednej bazy (uszkodzony oryginał) do drugiej (nowo założony plik bazy). Program można pobrać tutaj: http://wildcat.huzar.pl/download/INSTALKI/INNE/POMPA/

O tym jak przepompować bazę danych w programie Pompa można przeczytać tutaj.

2. Można skorzystać z pomocy IBSurgeon. Poniżej znajduje się wersja diagnostyczna oprogramowania do naprawy poważniej uszkodzonych baz:
http://ibsurgeon.com/products/firebird_interbase/IBFirstAID-FBFirstAID

Dział pomocy