AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird 2.5 Generator falsch - Trigger FireDAC
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird 2.5 Generator falsch - Trigger FireDAC

Ein Thema von Emwykey · begonnen am 6. Feb 2018 · letzter Beitrag vom 15. Feb 2018
Antwort Antwort
Seite 1 von 2  1 2      
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#1

AW: Firebird 2.5 Generator falsch - Trigger FireDAC

  Alt 6. Feb 2018, 11:59
Wenn dem so ist, wie oben beschrieben, wäre die Prüfung im Trigger zu ändern.

Wenn new.id is null oder new.id = 0 wird ein Wert vom Generator geholt, in jedem anderen Fall wird ein Fehler ausgelöst, um darüber festzustellen, wer da ggfls. was liefert. Ausgehend von Deiner Beschreibung dürfte dies eigentlich nie passieren (aber man weiß ja nie )

Zuerst muss sichergestellt werden, dass von keiner Stelle eine ID in die Tabelle geschrieben wird, außer vom Trigger unter Zuhilfenahme des Generators.

Ein bisserl Info zum Thema: http://www.ibexpert.net/ibe_de/index...orenGrundlagen

Eventuell hilft dies bei der Fehlersuche. Der Fehler muss nicht zwingend in der Datenbank liegen, eventuell verhält sich irgendwo in einem Programm etwas nicht so, wie es eigentlich von der Systemarchitektur vorgesehen ist.

Z. B.:
Gibt es irgendwo ein Programm, das bei 'nem Rollback meint, den Generator zurücksetzen zu müssen.
Oder holt sich irgendwo jemand 'nen Wert vom Generator und zählt dann selbst weiter und schreibt in die Tabelle, so dass der Generator dadurch quasi "überholt" wird?

Prinzipell scheint es mir (mit den bisherigen Informationen) so, dass man auch mal alles außerhalb der Datenbank, was irgendwie mit den Tabellen zu tun hat (oder haben könnte), überprüfen müsste. Wird irgendwo auf den Generator zugegriffen, außer vom Trigger aus?

Habe leider keine Stelle gefunden, an der ein ähnlicher Fehler beschrieben wird, um festzustellen, ob es eventuell ein bekanntes Datenbankproblem sein könnte.
  Mit Zitat antworten Zitat
Emwykey

Registriert seit: 27. Aug 2013
51 Beiträge
 
#2

AW: Firebird 2.5 Generator falsch - Trigger FireDAC

  Alt 6. Feb 2018, 12:25
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Firebird 2.5 Generator falsch - Trigger FireDAC

  Alt 6. Feb 2018, 12:41
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?
Heiko

Geändert von hoika ( 6. Feb 2018 um 12:45 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#4

AW: Firebird 2.5 Generator falsch - Trigger FireDAC

  Alt 6. Feb 2018, 12:45
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.
  Mit Zitat antworten Zitat
Emwykey

Registriert seit: 27. Aug 2013
51 Beiträge
 
#5

AW: Firebird 2.5 Generator falsch - Trigger FireDAC

  Alt 6. Feb 2018, 13:33
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

Geändert von Emwykey ( 6. Feb 2018 um 13:36 Uhr)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.395 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Firebird 2.5 Generator falsch - Trigger FireDAC

  Alt 6. Feb 2018, 14:04
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.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Firebird 2.5 Generator falsch - Trigger FireDAC

  Alt 6. Feb 2018, 14:21
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)?
Heiko
  Mit Zitat antworten Zitat
Emwykey

Registriert seit: 27. Aug 2013
51 Beiträge
 
#8

AW: Firebird 2.5 Generator falsch - Trigger FireDAC

  Alt 6. Feb 2018, 14:51
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
  Mit Zitat antworten Zitat
Emwykey

Registriert seit: 27. Aug 2013
51 Beiträge
 
#9

AW: Firebird 2.5 Generator falsch - Trigger FireDAC

  Alt 6. Feb 2018, 14:49
ok, danke! werde ich versuchen!
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: Firebird 2.5 Generator falsch - Trigger FireDAC

  Alt 6. Feb 2018, 20:08
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 11:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz