AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird Erreichbarkeit gewährleisten

Firebird Erreichbarkeit gewährleisten

Ein Thema von Nathan · begonnen am 13. Sep 2017 · letzter Beitrag vom 13. Sep 2017
Antwort Antwort
Foren-Tage 2017
DIE Konferenz für Delphi-Entwickler mit vielen Vorträgen und ganztägigen Workshops, veranstaltet u.A. von der Delphi-PRAXiS und Embarcadero.
21.-23. September 2017 in Hamburg · Mehr Infos unter forentage.de.
Nathan

Registriert seit: 6. Nov 2003
Ort: Birmensdorf / Zürich
4 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Firebird Erreichbarkeit gewährleisten

  Alt 13. Sep 2017, 07: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
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
104 Beiträge
 
#2

AW: Firebird Erreichbarkeit gewährleisten

  Alt 13. Sep 2017, 10:18
Hallo,

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.
Warum? Laufen tatsächlich ständig Operationen gegen die Datenbank, oder findet eine mehr oder weniger zeitraubender Operation auf dem Client statt?

Falls es eine einzige (oder ein paar wenige) Operation ist wäre die saubere Lösung, sich zur Datenbank zu verbinden, lesen was zu lesen ist, die Verbindung beenden, verarbeiten und das Ergebnis zurückschicken.

Falls es konzeptionell nicht möglich ist so zu arbeiten, gäbe es die Möglichkeit eine zweite, strukturgleiche Datenbank aufzubauen, diese kann lokal oder remote sein, und diesen Schatten über eine Replikationslösung aktuell zu halten.

Die Operatioen die lange laufen werden nun gegen den Schatten durchgeführt, währenddessen keine Replikation stattfindet und die erste DB normal weiter läuft. Nach dem Ende der Operationen werden die Änderungen an beiden Datenbanken repliziert um wieder Synchronität zu erzeugen.

Zitat:
Jetzt kann es vorkommen, das der Server wegen z.B Netzwerkproblemen nicht erreichbar ist oder unsere Kunden fahren diesen einfach herunter.
Mit einem Schatten unter Deiner Kontrolle kein Problem, da du entscheidest auf welchem Rechner dieser liegt.

Wenn während der Arbeiten die Du durchführst durch andere nur lesend auf die DB zugegriffen wird, wäre es auch eine Möglichkeit vor den Arbeiten das Datenbankfile der Firebirddatenbank zu kopieren und unter einem anderen Namen abzulegen. Sich zu dieser "neuen" Datenbank zu verbinden, die Arbeiten durchzuführen, den Ursprungsserver anzuhalten, die geänderte Datenbank bzw. das Datenbankfile so zurück zu kopieren das es das Original überschreibt, und die DB wieder hochzufahren.

Ob und welche Replikationslösung für Dich funktioniert kannst Du ja ausprobieren, bevor Du dich an die Arbeit machst.

http://www.firebirdfaq.org/faq249/

cu Ha-Jö
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
1.920 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: Firebird Erreichbarkeit gewährleisten

  Alt 13. Sep 2017, 10:30
Vielleicht ist das ein Fall für firebird events.
Die können natürlich nur genutzt werden, wenn der Grund für den Ausfall in der DB selbst liegt, also ein geregelter Shutdown.
Netzwerkausfälle bekommt an damit kaum in den Griff.
Wenn darüber hinaus die DB Komponenten nicht zentral conncected oder disconnected werden (können), weil jeder Kompo ihr eigenes Süppchen kocht, dann wird es schwierig.
Eine schrittweise Bereinigung der Connections wäre da sicher ratsam.
Dann kann man zentral reagieren (auf Firebird Events, Netzwerkfehler usw.)
Gruß, Jo
  Mit Zitat antworten Zitat
Nathan

Registriert seit: 6. Nov 2003
Ort: Birmensdorf / Zürich
4 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Firebird Erreichbarkeit gewährleisten

  Alt 13. Sep 2017, 10:42
Danke. Das Verfahren über die Replikation hört sich ganz gut an. Es kocht halt jeder ein bisschen sein Süppchen. Eine gemeinsame Suppe wäre besser aber dauer halt. Aber Danke für die Tipps.
Nathan Chanan Thurnreiter
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf