Datenbank-Abbrüche Evident Arztsoftware

Themen rund um den praktischen Einsatz von Firebird. Fragen zu SQL, Performance, Datenbankstrukturen, etc.

Moderator: thorben.braun

stefan_sb
Beiträge: 6
Registriert: Mi 31. Mai 2023, 10:55

Hallo zusammen,
ein Kunde von uns hat die Zahnarztsoftware "Evident" im Einsatz. Die Evident Datenbank läuft unter Firebird.
Laut Windows Ereignisanzeige stürzt seit ca. 2 Wochen alle 30 bis 120 Minuten der Dienst "Firebird Server - EVIDENT" ab. Nach ca. 1 Sekunde wird der Dienst automatisch neu gestartet und läuft dann wieder.
Bevor der Fehler aufgetreten ist, haben wir ein Evident Update auf die Version 5.76.04.15 installiert. Dieses Update wurde erfolgreich ausgeführt. Laut Evident Support hat sonst kein anderer Kunde diese Probleme. (Das Update ist jetzt ca. 4 Wochen alt und sollte bereits von vielen Kunden installiert worden sein.)
Durch den Abbruch des Dienstes bricht das Programm bei allen Evident Benutzern ab. Angezeigte Fehlermeldung: Datenbankfehler
Mit dem Evident Support haben wir den Fehler bereits zwei Stunden geprüft. Ohne Ergebnis. Irgendetwas bringt den Dienst oder den Firebird zum Absturz!
Es lässt sich in Evident keine Regelmäßigkeit nachvollziehen. Der Fehler lässt sich leider nicht gezielt nachstellen.
Die Evident Entwicklung reagiert leider nicht auf die offene Anfrage.
Betriebssystem: Windows Server 2022 Standard (Hyper-V VM)
Firebird-Server: 2.5.8
Unser nächster Lösungsansatz wäre, den Evident-Server in einer neuen VM zu installieren.
Habt Ihr noch eine andere Idee? Hätte jemand Lust sich gegen Bezahlung den Fehler anzuschauen? Gibt es hier Firebird Experten die sich die Datenbank anschauen würden? Bitte schreibt mir eine PN. Vorab vielen Dank.
Viele Grüße Stefan
bfuerchau
Beiträge: 485
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Neben dem Problem, dass die 2.5.8 stark veraltet ist, hast du keine Chance den Fehler im Firebirddienst zu finden. Diese Art der Probleme hatte ich persönlich noch nie festgestellt.
Durch normalen Betrieb ist es auch nahezu unmöglich den Fehler gezielt zu provozieren.
Die einzige Vorstellung meinerseits ist die Verwendung von sog. externen UDF-Funktionen. Wenn diese keine saubere Fehlerbehandlung haben, können diese auch den FBServer zum Absturz bringen.
Ob UDF's verwendet werden, kann dir nur der Hersteller sagen.
Sollte es DB-Fehler an sich geben, so sollten darauf Hinweise im Firebird-Log zu finden sein.
C:\Program Files\Firebird\Firebird_2_5\firebird.log
Die Datei kann mit Notepad angezeigt werden.
Folgende Einträge können grundsätzlich ignoriert werden:
Sweep is started by SWEEPER
Sweep is finished
Die folgenden sind nur Verbindungsabbrüche zum Client:
INET/inet_error: read errno = 10054
Unable to complete network request to host "Clientname"

Ansonsten kann es auch hilfreich sein, die DB mal per GBAK zu sichern und wieder herzustellen (Save/Restore). Das sollte allerdings nicht im laufenden Betrieb gemacht werden. Zusätzlich kann es die DB beschleunigen.
Dabei kann es dann auch vorkommen, dass der GBAK abbricht, was dann tasächlich auf einen schweren DB-Fehler hinweist.
Hier kann man dann auch eher selten mit GFIX die Daten retten.

Empfehlenswert ist auch eine Umstellung auf 3.0. Die Installation ist kompatibel zur 2.5 so dass die Anwendung damit auch arbeiten könnte. Das sollte der Hersteller aber auch machen können.

Ohne den Hersteller lässt sich da i.W. wirklich nichts erreichen.
Ich habe auch ab und an das Problem, dass gewisse Fehler meiner Anwendung ausschließlich bei nur einem Kunden auftreten.
Da kann ich auch nicht einfach behaupten: Sie sind der Einzige mit diesem Fehler, ich kann da nichts machen.
stefan_sb
Beiträge: 6
Registriert: Mi 31. Mai 2023, 10:55

Lieber bfuerchau,

vielen Dank für Ihre schnelle Rückmeldung.
Der normale Support vom Hersteller kann nicht weiterhelfen und die Entwicklung meldet sich seit ca. 2 Wochen nicht zurück.

Im firebird.log steht:
Wed May 31 10:00:53 2023
INET/inet_error: read errno = 10054
Wed May 31 10:02:05 2023
INET/inet_error: read errno = 10053
Wed May 31 10:04:41 2023
Access violation.
The code attempted to access a virtual
address without privilege to do so.
This exception will cause the Firebird server
to terminate abnormally.
Wed May 31 10:04:41 2023
Shutting down the server with 41 active connection(s) to 10 database(s), 0 active service(s)
Wed May 31 10:04:46 2023
Firebird shutdown is still in progress after the specified timeout
Wed May 31 10:04:46 2023
Operating system call WaitForSingleObject failed. Error code 6
Wed May 31 10:04:46 2023
operating system directive WaitForSingleObject failed
Das Handle ist ungültig.
Wed May 31 10:04:46 2023
Operating system call ReleaseSemaphore failed. Error code 6
Wed May 31 10:04:46 2023
Operating system call ReleaseSemaphore failed. Error code 6
(Client) Wed May 31 10:04:46 2023
"C:\Program Files (x86)\EVIDENT\APPS\FIREBIRD\bin\fbserver.exe": terminated abnormally (4294967295)
(Client) Wed May 31 10:04:47 2023
Guardian starting: "C:\Program Files (x86)\EVIDENT\APPS\FIREBIRD\bin\fbserver.exe"

Hilft Ihnen dies etwas?
Evident läuft laut Support derzeit nur mit Version 2.5.8. Die Version 3.0 wird derzeit getestet.
Für Ihre Hilfe bin ich Ihnen wirklich sehr sehr dankbar. Gerne zeige ich mich erkenntlich.
Viele Grüße Stefan
bfuerchau
Beiträge: 485
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Zumindest zeigt es auf einen schweren Fehler hin.
Ein erster Versuch wäre mal einen Backup zu versuchen.
Allerdings, wenn der Hersteller das Masterkennwort geändert hat, haben wir keine Chanche, denn der Aufruf benötigt User und Kennwort.
Allerdings: Versuch macht kluch:
Erstelle eine textdatei mit dem Namen backup.bat und editiere sie mit Notepad.
gebe folgende Zeile an:

"C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe" -b "<Pfad und Name der DB>" "Pfad und Name der DB.bkb" -user SYSDBA -passw masterkey
pause

Rufe die bat dann per Doppelcklick auf. Es sollte sich ein CMD-Fenster aufmachen und der Befehl sichtbar sein.
Im Verzeichnis der DB sollte dann die xxx.bkb erstellt werden. Wenn es zu einer Fehlermeldung kommt, dann haben wir schlechte Karten, poste die aber trotzdem hier.

Wenn der Backup allerdings erfolgreich ist, kopiere die Bat und ändere den Namen auf "restore.bat".

Ändere nun obigen Befehl in
"C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe" -r "<Pfad und Name der DB.bkb>" "Pfad und Name der DB-Restor.fdb" -user SYSDBA -passw masterkey

Die Dateiendung ist entsprechend des DB-Namens zu wählen.

Danach sollte die DB in einer neuen Version bereitstehen.
Anschließend rufst du den Taskmanager auf und wählst das Register "Dienste".
Per rechter Maustaste auf irgendeinem Dienst öffnest du "Dienste öffnen".
Dort suchst du nach "FirebirdServerDefaultInstance".
Auf der linken Seite wählst du "Dienst beenden".

Nun benennst du die alte DB in "altName der DB" um und die obige restore.fdb in den orignalen Namen.

Im Dienstmanager wähle "den Dienst starten" aus.

Falls die Anwendung nicht über den Dienst arbeitet, kommen wir auch an dieser Stelle ohne die Hilfe des Herstellers nicht aus. Dasselbe gilt, wenn du den Standort der DB nicht kennst oder in Erfahrung bringen kannst.

Falls du weitere Hilfe benötigst: 02129 / 59309. Die Konditionen sage ich dir dann am Telefon ;).

Nachtrag: Ich habe den Beitrag unter leichtem Alkoholeinfluss geschrieben. Dreckfuhler bitte ich tzu entzuldigen.
stefan_sb
Beiträge: 6
Registriert: Mi 31. Mai 2023, 10:55

Lieber bfuerchau,

vielen lieben Dank für Ihre Unterstützung. :-)
Beim Restore kommt wiederholt dieser Fehler: (Ich habe den Restore 3x ausgeführt. Er bleibt immer mit der gleichen Meldung hängen. Der "Firebird Dienst" hängt sich in dem Moment der Fehlermeldung auch auf.)

"C:\Program Files (x86)\EVIDENT\APPS\FIREBIRD\bin\gbak.exe" -r "C:\Users\Administrator\Desktop\Datenbank\bak\GLOBAL.bkb" "C:\Users\Administrator\Desktop\Datenbank\Restore\GLOBAL.FDB" -user SYSDBA -passw masterkey
gbak: ERROR:validation error for column "CONNECTORCONTEXT"."CCASASERVICEMANDATEID", value "*** null ***"
gbak: ERROR:warning -- record could not be restored
gbak:Exiting before completion due to errors
gbak: ERROR:Error writing data to the connection.

Hilft Ihnen dies etwas? Vorab vielen Dank für Ihre Unterstützung. Selbstverständlich zeige ich mich erkenntlich.

Herzliche Grüße Stefan
bfuerchau
Beiträge: 485
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Du darfst natürlich den Restore nicht auf die echte DB machen sondern auf einen temporären Namen, z.B. Restore.FDB.
Wenn der dann durch ist, den Dienst beenden, die alte DB umbenennen, zur Sicherheit, und die Restore.FDB in den korrekten Namen.
Anschließend den Dienst wieder starten.
GBAK benutzt den FB-Server gar nicht, so dass dieser durch den Restore nicht abbrechen kann.

Ist der FB-Dienst tatsächlich als 32-Bit-Dienst installiert?
Wie groß ist die DB denn inzwischen?
Als 64-Bit-Dienst läuft das wohl besser.
Auch eine 32-Bit-App kann mit einem 64-Bit-Dienst umgehen, es sei denn, die DB wird als interne DB ohne Dienst behandelt.
Das weiß wiederum der Softwarehersteller.
stefan_sb
Beiträge: 6
Registriert: Mi 31. Mai 2023, 10:55

Lieber bfuerchau,

der Hersteller kümmert sich jetzt drum. Daher erstmal erledigt. Vielen vielen Dank für Deine Unterstützung. :-)

Herzliche Grüße Stefan
vr2
Beiträge: 214
Registriert: Fr 13. Apr 2018, 00:13

Hallo Stefan,

noch ein Nachtrag: Ich vermute auch stark eine udf, die den Server versenkt. Ein Teil der Logeinträge sieht so aus.

Falls der Anbieter vorerst bei 2.5 bleiben will und die udfs in Ordnung bringt, geht wenigstens von 2.5.8 auf Firebird 2.5.9. Das ist das letzte Release der 2.5-Reihe, enthält noch einige Bugfixes. Aber vor allem ist es das einzige alte Release, das localtimestamp unterstützt, und das braucht man, wenn in der DB oder Anwendung current_timestamp benutzt wird. Ohne das kommt man nicht auf Firebird 4. Firebird 3 würde ich gleich überspringen, die Umstellung auf Firebird 4 ist einfacher, weil es dort einige Kompatibiltätsschalter für Altanwendungen gibt, die Firebird 3 nicht hat.

Viele Grüße, Volker
stefan_sb
Beiträge: 6
Registriert: Mi 31. Mai 2023, 10:55

Hallo Volker,

danke für Deine Nachricht.
Ich leite Deine Infos an den Hersteller weiter. :-) Vielen Dank.

Ein schönes Wochenende. Herzliche Grüße
Stefan
bfuerchau
Beiträge: 485
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Der Wechsel auf 3.0 ist kein Hexenwerk:
- Backup der DB's mit 2.5
- Deinstall FB 2..5
- Install FB 3.0 incl. Legacy Mode
- Restore Backup-DB's mit 3.0
- Weitermachen

Ich kann das leicht sagen weil:
- Wir nutzen keine Trigger und UDF's sondern nur Execute Block bei komplexen Dingen, ansonsten nur simple SQL mit bis zu 200 Joins;-).
- Wir haben je Tabelle nur 1 View
- Wir haben je Tabelle viele Indizees
- Wir haben nur folgende Feldtypen: Double, Varchar, Date, Bigint und kommen damit vollkommen zurecht und machen damit komplexe BI-Berichte
- Benutzerverwaltung ist extern incl. Row-Filter und wird in der DB in einem Blob verschlüsselt abgelegt.
- Für die Verbindung nutzen wir in der 32-Bit-App noch den FB-ODBC-Treiber
- In der neuen 64-Bit-Welt nutzen wir den, leicht optimierten, .Net-FB-Client.
Antworten