Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Uszkodzony (?) plik bazy FireBird

795 views
Skip to first unread message

Andrzej Ciach

unread,
Nov 21, 2006, 2:48:31 PM11/21/06
to
Witam,
mam plik bazy danych zrobiony dla FireBird 1.5.
Przy pomocy programu IBExpert chciałem zrobić backup bazy. Ta operacja
się nie udaje, kończy się to komunikatem :
"Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements
internal gds software consistency check (wrong record length (183))
gds_$start_request failed"

Mogę się do tej bazy podłączyć, obejrzeć większość tabel - ale przy
niektórych tabelach pojawia się ten sam błąd.

Czy to oznacza, że plik bazy danych jest uszkodzony? A jeśli tak, to
czy można go naprawić?

Andrzej Ciach

miab

unread,
Nov 21, 2006, 3:24:38 PM11/21/06
to

Andrzej

unread,
Nov 21, 2006, 4:19:11 PM11/21/06
to
Zrób tak:
1. gfix.exe -mend -ignore -user SYSDBA -password masterkey <baza danych
+ ścieżka>
2. gbak.exe -b -ig -l -user SYSDBA -password masterkey <baza + ścieżka>
<plik bekapu + ścieżka>
3. gbak.exe -r -user SYSDBA -password masterkey <plik bekapu> <baza +
ścieżka>

U mnie w większości wypadków pomaga. Daj znać jak się udało.

Andrzej

Andrzej Ciach

unread,
Nov 21, 2006, 7:17:33 PM11/21/06
to
On Tue, 21 Nov 2006 21:24:38 +0100, "miab" <miw...@wp.pl> wrote:

>> Czy to oznacza, że plik bazy danych jest uszkodzony? A jeśli tak, to
>> czy można go naprawić?
>
>Zobacz tu:
>http://ibsurgeon.com/home/

Niestety - program IBFirstAid nie znalazł w tej bazie żadnego błędu...
Za to IBAnalyst po połączeniu z bazą zawiesza się.

Andrzej Ciach

Andrzej Ciach

unread,
Nov 21, 2006, 7:17:33 PM11/21/06
to
On Tue, 21 Nov 2006 22:19:11 +0100, "Andrzej" <a...@4.mail> wrote:

>Zrób tak:
>1. gfix.exe -mend -ignore -user SYSDBA -password masterkey <baza danych
>+ ścieżka>
>2. gbak.exe -b -ig -l -user SYSDBA -password masterkey <baza + ścieżka>
><plik bekapu + ścieżka>
>3. gbak.exe -r -user SYSDBA -password masterkey <plik bekapu> <baza +
>ścieżka>
>

Proces zakończył się błędem w punkcie 3 - z takimi komunikatami :
D:\Program Files\Firebird\Firebird_1_5\bin>gbak.exe -r -user SYSDBA
-password masterkey a.bak nowa.gdb
gbak: cannot commit index FK_JAKIS_NZD
gbak: ERROR: violation of FOREIGN KEY constraint "PK_NAZWY" on table
"NAZWY"
gbak: ERROR: action cancelled by trigger (3) to preserve data
integrity
gbak: ERROR: Cannot deactivate primary index
gbak: Exiting before completion due to errors

Może jeszcze jakieś pomysły? Bo ja niestety FireBirda znam bardzo
pobieżnie...

Andrzej Ciach

qu...@interia.pl

unread,
Nov 22, 2006, 4:32:15 AM11/22/06
to

Andrzej Ciach napisał(a):

Jeśli masz działającą bazę to zobacz co z czym łączy
FK_JAKIS_NZD, możliwe że jest coś zrobione z ręki i np: w polach
są NULL-e... albo jakieś inne "niespodziewane" wartości. Mozesz tez
sprobować usunąć CONSTRAINT "FK_JAKIS_NZD" i dopiero wtedy zrób
backup potem restore i dodaj ten CONSTRAINT.

Q

qu...@interia.pl

unread,
Nov 22, 2006, 4:32:47 AM11/22/06
to

Andrzej Ciach napisał(a):

Jeśli masz działającą bazę to zobacz co z czym łączy

Kmail

unread,
Nov 22, 2006, 6:17:48 AM11/22/06
to
Jesli nie działaja zwykłe znane zabiegi to przeslij baze wraz z czekiem 1
000 zł


Krzysztof

unread,
Nov 22, 2006, 6:56:26 AM11/22/06
to
Andrzej Ciach napisał(a):

> Witam,
> mam plik bazy danych zrobiony dla FireBird 1.5.
> Przy pomocy programu IBExpert chciałem zrobić backup bazy. Ta operacja

(...)

http://www.officerecovery.com/interbase/

Skonczylo sie miejsce na partycji w mowencie operacji na pliku
interbase... oczywiscie plik sie uszkodzil i cala baze mozna wtedy
wyrzucic. Powyzsze narzedzie poradzilo sobie ze zniszczeniami.. wersja
demo wstawia w pola tekstowe 'demo'.

Z drugiej zas strony po tym niemilym wypadku omijam Interbasea,
Firebirda z daleka. Co to za baza bez transakcyjnosci zapisu na dysk.
Rozumiem, zeby uszkodzilo kilka rekordow, niespojnosc ostatnich danych a
potem zwiecha itp. A tak to calosc jest niedostepna.

Pozdrawiam
Krzysztof

Andrzej Ciach

unread,
Nov 22, 2006, 7:44:15 AM11/22/06
to
On Wed, 22 Nov 2006 12:17:48 +0100, "Kmail" <kmail@wpq_bez_q_.pl>
wrote:

>Jesli nie działaja zwykłe znane zabiegi to przeslij baze wraz z czekiem 1
>000 zł

Taki wątek za chwilę się pojawi. Chodziłoby mi o coś takiego
(niezależnie od pierwszego tematu) :
1. zrobienie audytu bazy
2. naprawa bazy, jeśli okaże się to konieczne (moje próby robię na
backupie sprzed kilku miesięcy)
3. zrobienie audytu aplikacji - o ile jest coś takiego możliwe i
wykazanie słabych punktów przy korzystaniu z bazy (nieefektywne SQLe,
brak potrzebnych indeksów itp.)

Ale to szerszy temat. Jeśli jednak ktoś byłby zainteresowany to proszę
o kontakt na priv. Praca byłaby na terenie Trójmiasta. Klient jeszcze
się na to nie zdecydował, ja na razie próbuję rozpoznać temat i
zorientować się w tym, co można osiągnąć i za ile.

Andrzej Ciach

wloochacz

unread,
Nov 22, 2006, 8:20:44 AM11/22/06
to
[ciach]

> Skonczylo sie miejsce na partycji w mowencie operacji na pliku
> interbase... oczywiscie plik sie uszkodzil i cala baze mozna wtedy
> wyrzucic. Powyzsze narzedzie poradzilo sobie ze zniszczeniami.. wersja
> demo wstawia w pola tekstowe 'demo'.
A gdzie był administrator? A gdzie była kopia bezpieczeństwa?

> Z drugiej zas strony po tym niemilym wypadku omijam Interbasea,
> Firebirda z daleka. Co to za baza bez transakcyjnosci zapisu na dysk.

Wzorcowa implementacja maksymy: "Ignorantia iuris neminem excusat"
Bo, jak sądzę, flaga konfiguracyjna force_writes była ustawiona na off??

--
wloochacz

miab

unread,
Nov 22, 2006, 8:50:18 AM11/22/06
to

Płacisz za samodzielny serwer, administracje serwera, serwer bazodanowy,
kopie bezpieczenstwa - wymagasz, nie płącisz za wszystko co wymienione -
nie wymagasz albo płacisz za naprawę.

miab

RobK

unread,
Nov 22, 2006, 10:42:09 AM11/22/06
to
> Bo, jak sądzę, flaga konfiguracyjna force_writes była ustawiona na off??

Przy okazji...
gdzie się to ustawia i co ona dokładnie robi?

RobK


Sławomir Niedziela

unread,
Nov 22, 2006, 1:03:45 PM11/22/06
to
Andrzej Ciach wrote:

> Witam,
> mam plik bazy danych zrobiony dla FireBird 1.5.
> Przy pomocy programu IBExpert chciałem zrobić backup bazy. Ta operacja
> się nie udaje, kończy się to komunikatem :
> "Unsuccessful execution caused by a system error that precludes
> successful execution of subsequent statements
> internal gds software consistency check (wrong record length (183))
> gds_$start_request failed"
>

[...]
Gdybym wczoraj nie zdecydował, że lepiej iść na piwo, pewnie napisałbym
podobnego posta. Dzisiaj jestem cały w skowronkach, bo się udało dzięki
gfix -mend -> backup -> restore, tak jak napisał Andrzej.
Robiłem to za pomocą IBExperta, ale schemat taki sam.
Baza nie była zbyt uszkodzona (tylko klucz obcy), bo od 23 sierpnia
kilkanaście razy pojawił się taki komunikat, a dopiero wczoraj panienka
zameldowała "Bo mnie to wyskoczyło". Ostatni backup był z 10 kwietnia -
przynajmniej wiem kiedy byłem tam ostatnio.
A swoją drogą, jaka jest tego przyczyna? Ja zakładam, że dysk zaczyna padać.

--
Sławek


Krzysztof

unread,
Nov 23, 2006, 6:11:25 AM11/23/06
to
wloochacz napisał(a):

> [ciach]
>> Skonczylo sie miejsce na partycji w mowencie operacji na pliku
>> interbase... oczywiscie plik sie uszkodzil i cala baze mozna wtedy
>> wyrzucic. Powyzsze narzedzie poradzilo sobie ze zniszczeniami.. wersja
>> demo wstawia w pola tekstowe 'demo'.
> A gdzie był administrator? A gdzie była kopia bezpieczeństwa?

:) Jak wstawiasz program do klienta to raczej nie masz już kontroli nad
administracją. Kopia - była, z poprzedniej nocy, bez ostatnich, ważnych
wpisów. Dużo krwi zatem się nie przelało.

>
>> Z drugiej zas strony po tym niemilym wypadku omijam Interbasea,
>> Firebirda z daleka. Co to za baza bez transakcyjnosci zapisu na dysk.
> Wzorcowa implementacja maksymy: "Ignorantia iuris neminem excusat"
> Bo, jak sądzę, flaga konfiguracyjna force_writes była ustawiona na off??

Otóż to. Tak jak ktoś już napisał - nie bardzo wiem gdzie tą flagę się
ustawia. Domyślam się, że zapis jest realizowany po części przez serwer
(owa flaga) a po części przez system operacyjny (write-throught). W
każdym bądź razie warto wiedzieć czego szukać.

No cóż, "ó"czymy się całe życie ;)

Pozdrowienia
Krzysztof

wloochacz

unread,
Nov 23, 2006, 7:46:20 AM11/23/06
to
[ciach]

> Otóż to. Tak jak ktoś już napisał - nie bardzo wiem gdzie tą flagę się
> ustawia. Domyślam się, że zapis jest realizowany po części przez serwer
> (owa flaga) a po części przez system operacyjny (write-throught). W
> każdym bądź razie warto wiedzieć czego szukać.
http://sourceforge.net/project/showfiles.php?group_id=9028&package_id=60681&release_id=151857
Plik firebird.conf
flagi: ForcedWrites lub MaxUnflushedWrites i MaxUnflushedWriteTime

--
wloochacz
PS. wybaczcie literówkę, flaga nazywa się force_write

romekp

unread,
Nov 23, 2006, 7:45:26 AM11/23/06
to

Użytkownik "Andrzej Ciach" <_cia...@microsun.pl> napisał w wiadomości
news:jvk6m25ftdit32rv9...@4ax.com...

Witam
Ja robię tak

Cześć.
Naprawa bazy wymaga szeregu działań
1. W IBExpert
Tools-->Extract Metadata
wybieramy Procedury
w opcjach odznaczamy
"Generate 'create database' statement"
"Generate 'CONNECT' statement"
"Set Generators"
i wyciągamy dane do pliku
2. W IBExpert
Tools-->Extract Metadata
wybieramy Triggery
w opcjach odznaczamy
"Generate 'create database' statement"
"Generate 'CONNECT' statement"
"Set Generators"
i wyciągamy dane do pliku
3. W IBExpert
Tools-->Extract Metadata
wybieramy Generatory
w opcjach odznaczamy
"Generate 'create database' statement"
"Generate 'CONNECT' statement"
"Set Generators"
i wyciągamy dane do pliku
4.W IBExpert usuwamy wszystkie
generatory
triggery
procedury
5.W IBConsole robimy walidację danych z ustawioną opcją "Validate Record
Fragments" na true. IbConsola znajdzie kilka błędów. Robimy Repair
również z ustawionym "Validate Record Fragments" na true.
5a. Programem checknull lub ibnullfieldfinder(poszukaj na google) sprawdź
pola typu null
6.W IBConsoli poprawiamy dane w tabeli null, w rekordzie pole null może być
ustawiony na ' ' a powinno być 'N'.
7.W IBConsole robimy BackUp bazy na domyślnych parametrach.
8.W IBCOnsole robimy Restore bazy z następującymi parametrami
"Page size (Bytes)" na 8192
"Commit After Each Table" na true
"Validity Conditions" na Ignore
"Use All Space" na True
9.W IBExpercie wczytać skrypty w kolejności Generatory,Procedury,Trigery.
10.Ręcznie ustawić wartości generatorów.lub wykorzystać program marathon ,
który robi zrzut z wartościami.


polo57
Pozdrawiam Grupę


romekp

unread,
Nov 22, 2006, 3:19:54 PM11/22/06
to

"Andrzej Ciach" <_cia...@microsun.pl> wrote in message
news:jvk6m25ftdit32rv9...@4ax.com...

Witam

Ja to robię tak

Cześć.
Naprawa bazy wymaga szeregu działań :)

procedury
generatory
triggery


5.W IBConsole robimy walidację danych z ustawioną opcją "Validate Record
Fragments" na true. IbConsola znajdzie kilka błędów. Robimy Repair
również z ustawionym "Validate Record Fragments" na true.

5a. Wyszukaj program na google darmowy IBNullfFieldFinder.exe, którym
wyszukaj na bazie wszystkie tabele typu null i sprawdź czy napewno są tam
dane
6.W IBConsoli poprawiamy dane w tabeli,która jest null, w rekordzie pole
null może być ustawiony na ' ' a np. powinno być 'N'.


7.W IBConsole robimy BackUp bazy na domyślnych parametrach.
8.W IBCOnsole robimy Restore bazy z następującymi parametrami
"Page size (Bytes)" na 8192
"Commit After Each Table" na true
"Validity Conditions" na Ignore
"Use All Space" na True
9.W IBExpercie wczytać skrypty w kolejności Generatory,Procedury,Trigery.

10.Ręcznie ustawić wartości generatorów.lub jeśli nie chcecie robić tego
ręcznie, to z danymi zczytuje np. Marathon


polo57
pozdrawiam


wloochacz

unread,
Nov 23, 2006, 10:25:30 AM11/23/06
to
[ciach]

> 5.W IBConsole robimy walidację danych z ustawioną opcją "Validate Record
> Fragments" na true. IbConsola znajdzie kilka błędów. Robimy Repair
> również z ustawionym "Validate Record Fragments" na true.

> 5a. Wyszukaj program na google darmowy IBNullfFieldFinder.exe, którym
> wyszukaj na bazie wszystkie tabele typu null i sprawdź czy napewno są tam
> dane

Nie rozumiem co tu napisałeś; czytać umiem, ale nie rozumiem o co tu
chodzi...
"Wszystkie tabele null" - chyba miałeś na myśli pola?
"sprawdź czy napewno są tam dane" - a jeśli nie ma to co? To dobrze,
ponieważ baza dopuszcza pustą wartość w tym polu...

> 6.W IBConsoli poprawiamy dane w tabeli,która jest null, w rekordzie pole
> null może być ustawiony na ' ' a np. powinno być 'N'.

> 7.W IBConsole robimy BackUp bazy na domyślnych parametrach.

> 8.W IBCOnsole robimy Restore bazy z następującymi parametrami
> "Page size (Bytes)" na 8192

hmmm... a dlaczego nie 4096?

> "Commit After Each Table" na true
> "Validity Conditions" na Ignore
> "Use All Space" na True

IMO przede wszystkim trzeba wiedzieć co się robie, a nie bezkrytycznie
zaptaszkować opcje...

> 9.W IBExpercie wczytać skrypty w kolejności Generatory,Procedury,Trigery.
> 10.Ręcznie ustawić wartości generatorów.lub jeśli nie chcecie robić tego
> ręcznie, to z danymi zczytuje np. Marathon

Po co, skoro w IBExpercie ustawiłeś opcję "Set Generators"?

--
wloochacz

Andrzej

unread,
Nov 23, 2006, 2:27:17 PM11/23/06
to

Dokładnie. Jeśli chodzi ci o odzyskanie danych, to wywal wszystkie
indeksy odpowiadające za powiązania z innymi tabelami i próbuj dalej.
IBSurgeon na nie wiele się zda.

Andrzej

0 new messages