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
U mnie w większości wypadków pomaga. Daj znać jak się udało.
Andrzej
>> 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
>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
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
Jeśli masz działającą bazę to zobacz co z czym łączy
(...)
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
>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
> 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
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
Przy okazji...
gdzie się to ustawia i co ona dokładnie robi?
RobK
> 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
:) 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
PS. wybaczcie literówkę, flaga nazywa się force_write
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ę
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
> 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