AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird fehlerhaft auf 64 bit Maschine?
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird fehlerhaft auf 64 bit Maschine?

Ein Thema von khh · begonnen am 5. Apr 2012 · letzter Beitrag vom 7. Apr 2012
Antwort Antwort
Seite 1 von 2  1 2      
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#1

Firebird fehlerhaft auf 64 bit Maschine?

  Alt 5. Apr 2012, 10:45
Datenbank: firebird 32bit • Version: 2.1 • Zugriff über: zeos
Hallo zusammen,
ich habe bei einem Kunden auf einer 64 bit maschine ein
firebird 2.1 für 32 bit laufen.

Sind dazu irgendwelche Kombatibilitätsprobleme bekannt?

Ich habe zb. folgendes Phänomen:
in einem Logfile in welches die ID per Trigger geschrieben wird fehlen zwischen
ID 207881 und 207885
die 3 IDs
Statt dessen stehen bei der unsortierten Ausgabe an dieser Stelle die IDS 208459, 208460 und 208461
Bei der Sortierung nach ID besteht obige Lücke, die 208xxx sind logischerweise an der richtigen Stelle.

hat jemand ne Idee oder Erklärung?
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Firebird fehlerhaft auf 64 bit Maschine?

  Alt 5. Apr 2012, 10:58
Vielleicht ein zeitliches oder Multitask Phänomen. Ein Task/Insert wird gestartet bekommt die nächste freie ID kurz darauf startet ein zweites Insert bekommt die folgende ID und ist aber eher fertig (weniger aufwendiges insert vielleicht) mit dem Insert. Steht daraufhin trotz größerer Nummer vor dem anderen Eintrag.

Aber sind nur Vermutungen.
Thomas
Besucht doch mal http://www.hitziger.net
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Firebird fehlerhaft auf 64 bit Maschine?

  Alt 5. Apr 2012, 11:06
Vielleicht ein zeitliches oder Multitask Phänomen. Ein Task/Insert wird gestartet bekommt die nächste freie ID kurz darauf startet ein zweites Insert bekommt die folgende ID und ist aber eher fertig (weniger aufwendiges insert vielleicht) mit dem Insert. Steht daraufhin trotz größerer Nummer vor dem anderen Eintrag.

Aber sind nur Vermutungen.
kann ich mir so aber nicht vorstellen, da die "falschen" ids ja fast 600 Sätze weiter sind.
Das Datum dieser 3 "falschen" Sätze liegt übrigens auch einen halben Tag später.
Karl-Heinz
  Mit Zitat antworten Zitat
borwin

Registriert seit: 14. Sep 2006
Ort: Rostock
72 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Firebird fehlerhaft auf 64 bit Maschine?

  Alt 5. Apr 2012, 11:12
Zitat:
Ich habe zb. folgendes Phänomen:
in einem Logfile in welches die ID per Trigger geschrieben wird fehlen zwischen
ID 207881 und 207885
die 3 IDs
Statt dessen stehen bei der unsortierten Ausgabe an dieser Stelle die IDS 208459, 208460 und 208461
Bei der Sortierung nach ID besteht obige Lücke, die 208xxx sind logischerweise an der richtigen Stelle.
Das musst Du näher erklären.
Was steht im Trigger?
Woher kommt die ID?
In welcher Art und Weise wird das Log beschrieben?

Gruß Borwin
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Firebird fehlerhaft auf 64 bit Maschine?

  Alt 5. Apr 2012, 11:21
folgender Trigger ( before însert)

Code:
AS
begin
  /* Trigger text */

  IF (NEW.USELOG_ID IS NULL) THEN
     NEW.USELOG_ID = GEN_ID(GEN_USELOG_ID,1);

end
die Logtabelle dient zum Loggíng verschiedener Aktivitäten und wird wie folgt geschrieben.


Code:
    FQuery1.SQL.clear;
     FQuery1.SQL.add('select ');
     FQuery1.SQL.add('*');
     FQuery1.SQL.add('from USELOG where ');
     FQuery1.SQL.add('USELOG_ID = :USELOG_ID');
     FQuery1.ParamByName('USELOG_ID').AsInteger := FUSELOG_ID;
     FQuery1.open; // liefert eine leere datenmenge
     FQuery1.append; // neuen Datensatz anhängen
     {wird vom DB-Trigger erledigt }
  // FQuery1['USELOG_ID']:= USELOG_ID;

     FQuery1['ARBEITSPLATZID']:= FARBEITSPLATZID;
     FQuery1['PROGRAMMNAME']:= FPROGRAMMNAME ;
     FQuery1['BENUTZER']:= FBENUTZER ;
     FQuery1['LOGWERT1']:= FLOGWERT1;
     FQuery1['LOGWERT2']:= FLOGWERT2;
     FQuery1['LOGWERT3']:= FLOGWERT3;
     FQuery1['INORDNUNG']:= FINORDNUNG;
     FQuery1['AENDERTIME']:= FAENDERTIME;
     FQuery1['AENDERER']:= FAENDERER ;
     FQuery1.post;
der Fehler ist bisher nur auf diesem einen System aufgetreten.
Auf allen 32-bit-Maschinen kann ich den Fehler nicht reproduzieren.
Karl-Heinz
  Mit Zitat antworten Zitat
Lemmy

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

AW: Firebird fehlerhaft auf 64 bit Maschine?

  Alt 5. Apr 2012, 11:24
Hi,

um was für Trigger handelt es sich denn? Nur bei Connect/Disconnect Trigger gibts ne spezielle Transaction, der ganze Rest läuft innerhalb der Transaction, aus der sie raus gestartet wurden.
ALso 2 User: Einer trägt ein, speichert aber nicht - IDs sind belegt, 2. User trägt weiter ein und nach 4h hat User 1 seine Kaffeepause beendet und speichert dann...

Grüße
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Firebird fehlerhaft auf 64 bit Maschine?

  Alt 5. Apr 2012, 11:40
in dem Fall ist nur ein einziger User zum gleichen Zeitpunkt an der Arbeit.

Ergänzung:

in jedem Falle wird nach dem Schreiben des Logeintrag ein commit ausgeführt.
Karl-Heinz

Geändert von khh ( 5. Apr 2012 um 11:44 Uhr)
  Mit Zitat antworten Zitat
Lemmy

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

AW: Firebird fehlerhaft auf 64 bit Maschine?

  Alt 5. Apr 2012, 11:43
Hi Karl-Heinz

gut, dann nochmal: Um was für einen Trigger handelt es sich - denn auch mit einem User lässt sich das Verhalten nachspielen je nachdem wie die SOftware aufgebaut ist. z.B: die Software zweimal starten. Das Eingabefenster zweimal öffnen,.... usw.
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Firebird fehlerhaft auf 64 bit Maschine?

  Alt 5. Apr 2012, 11:49
der Trigger wurde beim Anlegen der Tabelle per Script im Ibexpert folgendermassen angelegt.

Code:

CREATE OR ALTER TRIGGER USELOG_BI0 FOR USELOG
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  /* Trigger text */

  IF (NEW.USELOG_ID IS NULL) THEN
     NEW.USELOG_ID = GEN_ID(GEN_USELOG_ID,1);

end
^


SET TERM ; ^
ob es sich dabei um connect /disconnect-Trigger handelt kann ich nicht sagen.
Karl-Heinz
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#10

AW: Firebird fehlerhaft auf 64 bit Maschine?

  Alt 6. Apr 2012, 09:25
Bei dem Trigger handelt es sich um keinen ON CONNECT / DISCONNECT Trigger, sondern wie aus dem Trigger-Body zu sehen ist, ein BEFORE INSERT Trigger für die Tabelle USELOG.

Da der Primärschlüsselwert durch einen Generator vergeben wird, können natürlich Lücken entstehen, wenn eine Insert-Operation durch ein Rollback zurückgesetzt wird. Nichts Ungewöhnliches.
  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 16:52 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