Registriert seit: 6. Nov 2003
Ort: Birmensdorf / Zürich
29 Beiträge
Delphi 10.2 Tokyo Enterprise
|
Firebird Erreichbarkeit gewährleisten
13. Sep 2017, 08:51
Datenbank: Firebird • Version: 2.5.2 • Zugriff über: Seattle
Hallo,
hätte da mal eine Frage was für alternativen es zu einem Timer Event gibt um Firebird Server Ausfälle mitzubekommen.
Um das Problem einmal kurz zu erläutern. Unsere Software ist über die Jahre zu einem Monolithen herangewachsen ohne wirkliches architektonisches Konzept.
Daraus entstanden Programme welche über mehre Tage ununterbrochen laufen. Ist soweit auch kein Problem. Die Programme halten aber ständig Kontakt zu einer Firebrid 2.5 Datenbank auf einem separaten Server. Jetzt kann es vorkommen, das der Server wegen z.B Netzwerkproblemen nicht erreichbar ist oder unsere Kunden fahren diesen einfach herunter. Zudem ist es möglich, Updates durchzuführen welche eine einzelne Database von Firebird neustarten. Mit allen Vorfällen, haben die Programme anschließend Probleme.
Es treten dann Fehler auf wie: "[Fehler] -902 335544528 database Aliasname shutdown".
Mein Lösungsansatz war eigentlich ein Database Trigger welcher den Fehler "SQLCODE GDSCODE SYMBOL TEXT -902 335544721 network_error Unable to complete network request to host "@1"." liefern soll. Dies funktioniert aber nicht sinnvoll.
Variante das bei jedem Dataset.Open ich den Fehler per Try Except mitbekomme funktioniert auch nicht, da mit verschiedenen Techniken und Unmengen an Codestellen umzugehen ist. Der Aufwand ist dann leider nicht zu rechtfertigen.
An was ich auch dachten, wäre ein Timer welcher per Intervall ein Statement absetzt und auf Fehler reagiert. Finde ich aber die schlechteste Lösung, da sie gegen alle Prinzipien verstößt und das Netzwerk unnötig belastet.
Zu Einsatz kommt bei uns vorwiegend TIBDatabase, TIBDatasSet usw. Komponenten. Da wir auch keinen OR Mapper einsetzten, kann ich leider auch nicht wirklich Zentral was regeln. Zumindest hab ich auf TIBDatabase kein Event wie OnError oder so ähnlich gefunden.
Einmaliges Prüfen beim Programmstart funktioniert auch nicht, da die Programme eben teilweise Tagelang laufen.
Ein eigenständiges Programm welches periodisch die Connection prüft, ist meines Erachtens mit einem Timer gleichzusetzen.
Alles z.B. auf Rest Services oder FireDAC ist leider auch nicht, aus Kostengründen möglich.
Wie geht Ihr mit so einem Problem um?
Danke schon mal für Eure Unterstützung.
Nathan Chanan Thurnreiter
|