AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Korruption in Firebird-DB (Indizes?)
Thema durchsuchen
Ansicht
Themen-Optionen

Korruption in Firebird-DB (Indizes?)

Ein Thema von urs.liska · begonnen am 12. Dez 2004 · letzter Beitrag vom 16. Dez 2004
Antwort Antwort
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#1

Korruption in Firebird-DB (Indizes?)

  Alt 12. Dez 2004, 16:46
Hallo Leute,

ich habe ein Problem mit einer anscheinend korrupten Firebird-(1.5)-DB. Und da ich den (sträflichen) Fehler gemacht habe, gleichzeitig Daten einzugeben und an der Struktur rumzumachen, wäre es schon ziemlich gut, wenn ich die Original-DB wiederherstellen könnte (und nicht ein Backup, von dem ich nicht abschätzen kann, was denn eigentlich fehlt).

Also: Die DB macht kein Backup mehr. An immer verschiedenen Punkten (aber im Kontext der gleichen zwei Tabellen), bricht das Backup mit der Fehlermeldung
Code:
Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
ab. Wenn ich es mehrmals nacheinander versuche, kann auch mal folgende Meldeung kommen:
Code:
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
internal error.
gds_$start_request failed.
.
Mir scheint, das Problem liegt a) nicht nur an der DB-Struktur, sondern auch an den Daten und b) möglicherweise an den Indizes, da der Abbruch immer während der Erstellung der Indizes erfolgt.

Der Abbruch erfolgt immer nach einem unterschiedlichen Index, aber immer im Zusammenhang mit einer von zwei Interselektionstabellen.

Wenn ich mir von IBExpert die Metadaten exportieren lasse und daraus anschließend eine neue, leere DB erzeuge, kann ich diese problemlos "backupen" und wieder "restoren" (wie sagt man sowas auf "neudeutsch"?). Daraus schließe ich, dass es irgendwie mit den eingegebenen Daten zu tun haben muss

Wenn ich mir von IBExpert die Metadaten inkl. Tabelleninhalt exportieren lasse, bricht der Versuch der Neuerstellung mit dem Verweis auf eine "Foreign Key violation" ab.

Wenn ich nun versuchshalber bei den betroffenen Tabellen Indizes und Schlüssel deaktiviere bzw. lösche (keine Angst, ich bin der einzige User der DB, es kann also niemand in der Zwischenzeit ungültige Daten eingeben), bricht das Backup an immer anderen Stellen ab.

Hat jemand eine Idee, woran genau ein solcher Fehler liegen kann bzw. wie ich da wieder raus komme?
Gibt es eine Möglichkeit, alle Indizes (einschließlich der in Schlüsseln verwendeten) neu aufzubauen?

Und falls alles nichts hilft: wie bekomme ich mit dem geringsten Frust die Daten in eine leere Kopie der DB
(Erschwerend kommt hinzu, dass es ein paar Tabellen gibt, die per Foreign Key auf sich selbst verweisen; dabei ist es möglich, dass ein Datensatz auf einen späteren verweist, was beim Übertragen natürlich eine Foreign Key Violation hervorrufen kann)

Bin über jeden Tipp sehr dankbar.
Urs


-----
WinXP
Firebird 1.5
IBExpert 2004.01.22
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Korruption in Firebird-DB (Indizes?)

  Alt 13. Dez 2004, 07:17
Hi,

wenn eine neue DB funktioniert, dann exportiere doch die Daten und spiele die in eine neue Datenbank ein.

WEnn das nicht geht:

Du kannst hergehen und die Indizes löschen:

drop index <IndexName>;

Wenn Du alle eigenen Relationen gelöscht hast, dann schau was:

Select * from rdb$relation_Constraints;

zurück liefert. Dort sind alle Constraints (Primärschlüssel, Fremdschlüssel) drin. Dann kannst Du die einzelnen Fremd- und Primärschlüssel löschen bzw. deren Index.

Lemmy
  Mit Zitat antworten Zitat
Benutzerbild von CenBells
CenBells

Registriert seit: 30. Mär 2003
Ort: Kiel urspr. Lübeck
176 Beiträge
 
Delphi 7 Professional
 
#3

Re: Korruption in Firebird-DB (Indizes?)

  Alt 13. Dez 2004, 10:54
Hi,

du kannst probieren das kleine tool gfix.exe (Im firebird\bin Verzeichniss auf die db anzuwenden)

Gruß
Ken
Ein Objekt ist eine zur Ausführungszeit vorhandene für seine Instanzvariablen Speicherplatz allokierende Instanz, die sich gemäß dem Protokoll ihrer Klasse verhält.
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#4

Re: Korruption in Firebird-DB (Indizes?)

  Alt 15. Dez 2004, 13:24
Hi,

danke für die Tipps.

gfix hat leider nichts gefunden.

Nachdem ich alle Fremd- und Hauptschlüssel sowie sämtliche Indizes gelöscht habe (ich freu mich schon darauf, sie alle wieder einzurichten), brach das Backup immer noch ab, allerdings an einer anderen Stelle.

Nun bin ich eher zufällig auf eine Inkonsistenz gestoßen (als ich eine zum Glück leere Tabelle nicht mehr anzeigen konnte):
Für eine Tabelle zeigte mir IBExpert keine Abhängigkeiten an, obwohl ein Trigger für die Tabelle definiert und auch aktiv war.
Ich habe die Tabelle neu erstellt und den Trigger neu eingerichtet - und siehe da, es geht.

Es gibt schon komische Sachen. Ich habe mit Sicherheit nichts selbst an den Systemtabellen manipuliert.

Hat vielleicht jemand eine Idee, wie so etwas zu Stande kommen kann (und wie man es evtl. vermeiden kann)

Gruß
Urs
  Mit Zitat antworten Zitat
DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#5

Re: Korruption in Firebird-DB (Indizes?)

  Alt 15. Dez 2004, 19:24
vermutlich hat du bei der aenderung der metadaten ein feld kleiner gemacht als es ursrspünglich war.

ich würde folgendes versuchen

1. versuchen die aenderung erst mal wieder rückgängug machen
dann dafür sorgen, das vor der erneuten aenderung die Daten der neuen Feldgroeße vorher angepaßt werden (update befehle)
2. wenns nichs bringt versuchen die Daten mit IBExpert in insert script exportieren (notfalls ohne defekte spalte)
dann metadaten der tabelle speichern, tabelle dropen, und tabelle neu anlegen.
anschließen insert script laufen lassen.
evtl. mußt du halt dabei trigger deaktivieren und abhaengigkeiten kurzzeitig eliminieren

mfg
DD
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#6

Re: Korruption in Firebird-DB (Indizes?)

  Alt 16. Dez 2004, 10:18
Danke für den Tipp.

Wie ich aber geschrieben habe, war die Tabelle ja zum Glück noch leer, daher konnte ich sei einfach neu erstellen und das Problem ist hoffentlich erledigt.
Etwas beunruhigend finde ich aber doch, dass ich die korrupte Tabelle nur durch Zufall gefunden habe. Die Abbruchstelle des Backup hatte nichts mit dieser Tabelle zu tun...

Urs
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz