Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird 2.5 Generator falsch - Trigger FireDAC (https://www.delphipraxis.net/195145-firebird-2-5-generator-falsch-trigger-firedac.html)

Emwykey 6. Feb 2018 12:25

AW: Firebird 2.5 Generator falsch - Trigger FireDAC
 
Hallo, danke für die Antwort, es gibt aber wirklich zu 100 % keine Stelle im Hauptprogramm und auch kein weiteres Programm welches abgesehen von den Triggern auf den Generator zugreift oder Werte in die Tabelle schreibt, ich hab sicherheitshalber noch einmal den ganzen Sourcecode geprüft. Es ist wirklich ausschließlich der Trigger - nach einem Backup und Restore läuft es auch wieder, allerdings tritt das Problem immer wieder und an verschiedenen stellen ( wie am Anfang erwähnt auf mit anderen Generatoren ) auf :( es ist zum Mäuse melken

hoika 6. Feb 2018 12:41

AW: Firebird 2.5 Generator falsch - Trigger FireDAC
 
Hallo,
wie Lemmy geschrieben hatte, musst Du bei RollBacks aufpassen.
Meines Wissens laufen die Generatoren ausserhalb der Rollbacks.

siehe auch hier:
http://firebirdsql.org/pdfmanual/Fir...ide-German.pdf

Komisch ist, dass er auf einem alten Wert steht.
Laut dem Generatorguide hätte ich eher Lücken in der Sequenz erwartet.

Zitat:

Hallo, der Wert wird nicht initialisiert
Das sagst Du, aber was sagt FireDAC?

Du hattest geschrieben, dass du nichts vergleichbares gefunden hattest.
Vielleicht ja so was ?
http://tracker.firebirdsql.org/browse/CORE-2041


Wie viele Insert-Statements in die Archiv-Tabelle hast Du in deinem Code?

Delphi.Narium 6. Feb 2018 12:45

AW: Firebird 2.5 Generator falsch - Trigger FireDAC
 
Verstehe ich das jetzt richtig:

Der Generator gibt bei Abfrage z. B. den Wert 100 aus, obwohl er eigentlich schon bei 105 sein sollte.

Nun machst Du ein Backup und ein Restore und fragst dann den Generator erneut ab und er enthält dann den erwarteten Wert von 105?

Das sieht dann aber eher nach einem Datenbankproblem aus. Gibt es da irgendwo einen Bug?

Wie hoika schreibt, darf bei der Vergabe der ID eine Lücke entstehen, wenn ein Rollback gemacht wird, aber das ein Generator auf einem alten, bereits vergebenen, Wert steht, widerspricht der Spezifikation.

Emwykey 6. Feb 2018 13:33

AW: Firebird 2.5 Generator falsch - Trigger FireDAC
 
Sorry ich schreib das hier nebenher...

nochmal ausführlich vielleicht:

Es gibt keinen Insert auf die Archiv Tabelle im Code - Ausschließlich über den Trigger auf der Tabelle selbst.

Für eine unvorhersehbare Zeit funktioniert alles prima, plötzlich steht der Generator auf einem alten Wert. Übersprungene Werte habe ich noch nicht gesehen, sind aber auch kein Problem.

Wenn ich den Generatorwert nun händisch korrigiere funktioniert es 1 mal, danach ist der Wert wieder falsch. -- Bei anderen Fällen ging es dann aber auch wieder für längere Zeit

Wenn ich vor oder nach der Korrektur ein Backup Restore durchführe tritt der Fehler nicht mehr auf ( zumindest für eine gewisse Zeit )

Der Generator wird Ausschließlich im Trigger angesprochen


Das selbe tritt auch bei anderen Tabellen auf, welche nur zum Teil durch den Trigger mit der ID versehen werden, ab und an wird der Generator auch direkt angesprochen ( daher die Abfrage auf ID is null)

Das ganze passiert in einigen Kopien der Datenbank, aber nicht in allen. Es passiert zu unterschiedlichen Aktionen Zeiten und bei unterschiedlichen Generatoren - ich konnte bisher noch keine Gemeinsamkeit entdecken.

Es gibt für den aktuellen Fall kein Element abgesehen von den Triggern welches auf Generator oder Tabelle Archiv zugreift


Danke nochmal für eure Mühen

Lemmy 6. Feb 2018 14:04

AW: Firebird 2.5 Generator falsch - Trigger FireDAC
 
Zitat:

Zitat von Emwykey (Beitrag 1393210)
Wenn ich den Generatorwert nun händisch korrigiere funktioniert es 1 mal, danach ist der Wert wieder falsch. -- Bei anderen Fällen ging es dann aber auch wieder für längere Zeit

Wenn ich vor oder nach der Korrektur ein Backup Restore durchführe tritt der Fehler nicht mehr auf ( zumindest für eine gewisse Zeit )

dann mach vor der nächsten Korrektur bitte mal ein gfix wie oben beschrieben - ich vermute, die DB hat da nen Schaden, der durchs Backup/restore gefixt wird.

hoika 6. Feb 2018 14:21

AW: Firebird 2.5 Generator falsch - Trigger FireDAC
 
Hallo,
vielleicht wird ja in einem Trigger, der nicht so häufig verwendet wird,
der falsche Generatorwert drin.
Exportiere mal deine DB (IBExpert, ExtractMetaData) und suche dort nach Deinem Generatorwert.

Was hat Deine DB für eine Endung, FDB oder GDB (Stichwort Schattenkopien)?

Emwykey 6. Feb 2018 14:49

AW: Firebird 2.5 Generator falsch - Trigger FireDAC
 
ok, danke! werde ich versuchen!

Emwykey 6. Feb 2018 14:51

AW: Firebird 2.5 Generator falsch - Trigger FireDAC
 
Zitat:

Zitat von hoika (Beitrag 1393214)
Hallo,
vielleicht wird ja in einem Trigger, der nicht so häufig verwendet wird,
der falsche Generatorwert drin.
Exportiere mal deine DB (IBExpert, ExtractMetaData) und suche dort nach Deinem Generatorwert.

Was hat Deine DB für eine Endung, FDB oder GDB (Stichwort Schattenkopien)?

Den Export kann ich versuchen, Dateiformat FDB

jobo 6. Feb 2018 20:08

AW: Firebird 2.5 Generator falsch - Trigger FireDAC
 
Zitat:

Zitat von Emwykey (Beitrag 1393210)
Sorry ich schreib das hier nebenher...
..

Der Generator wird Ausschließlich im Trigger angesprochen

..
ab und an wird der Generator auch direkt angesprochen ( daher die Abfrage auf ID is null)

Ich schreib das auch nebenher:

Sind die zitierten Aussagen oben nicht widersprüchlich?

Und,
es ist vollkommen wurscht, ob der Generator nebenher angesprochen wird.
Entscheidend ist, woher die Werte kommen, die in der Tabelle landen. Oder anders:
Du kannst dem Generator soviel Werte aus dem Kreuz leiern, wie Du magst. Und mit denen kannst Du machen, was Du willst.
Wichtig ist nur, dass in einer Tabelle die ID aus genau einem Generator kommt und in Deinem Fall sicherheitshalber bedingungslos, also ohne irgendwelche Prüfungen.

Es ist nicht ungewöhnlich, einen Generator als unique Quelle für mehrere oder auch viele Tabellen zu verwenden.
Es gibt sogar Dinge, die dafür sprechen.

Das gilt unabhängig von Deinem spezifischen Problem hier, die Reparatur bzw. Prüfung der DB Konsistenz würde ich als erstes machen und vor allem versuchen die Ursache zu finden.

p80286 6. Feb 2018 23:55

AW: Firebird 2.5 Generator falsch - Trigger FireDAC
 
wie überprüfst Du, daß der wert des Generators korrekt ist?
Wenn Du schreibst:
Zitat:

Zitat von Emwykey (Beitrag 1393173)
Denoch passiert es, dass von jetzt auf nachher der Wert des Generators zur Tabelle1_Archiv nicht mehr stimmt und somit natürlich auch das Insert/Update/Delete auf Tabelle1 fehlschlägt.

Habe ich leichte Bedenken, daß Du die Funktionsweise der Trigger/Generator-Kombination richtig verstanden hast. Für ein DELETE... oder UPDATE... wir der Generator nicht benötigt, da hierfür bereits Datensätze vorhanden sein müssen.

Ggf. wäre es günstig uns mal die Statements zu zeigen bei denen der Fehler auftritt.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 Uhr.
Seite 2 von 3     12 3      

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