Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird 2.x: Erste Verbindung zur Datenbank klappt nicht (https://www.delphipraxis.net/118820-firebird-2-x-erste-verbindung-zur-datenbank-klappt-nicht.html)

sveni2211 15. Aug 2008 14:37

Datenbank: Firebird • Version: 2.x • Zugriff über: ZEOS, aktuelle SVN Version

Firebird 2.x: Erste Verbindung zur Datenbank klappt nicht
 
Hallo.

Ich habe einen Dienst geschrieben, der beim Systemstart mit startet und als Datenbasis eine Firebird- Datenbank verwendet.

Wenn nun Dienst und Datenbank auf einem Rechner liegen, will das einfach nicht richtig funktionieren. Der Dienst meldet in seinem Log, er bekommt keine Verbindung zur Datenbank - beim Systemstart.
Läuft der Rechner bereits funktioniert alles problemlos. Wenn ich den Dienst starte verbindet er sich zur Datenbank.

Nun war meine Vermutung, dass der Dienst versucht auf Firebird zuzugreifen, wenn der noch nicht oben ist. Also habe ich ein Retry eingebaut, dass 10 Verbindungsversuche nach jeweils einer Minute unternimmt. Zeit genug also für den Firebird zum hochfahren.
Aber der Dienst bekommt keine Verbindung zur Datenbank. Obwohl ich den Firebird Server im der Prozessliste sehe und der Zugriff über IBConsole klappt, steht im nächsten Versuch des Dienstes im Log wieder, keine Verbindung. Stoppe ich den Dienst und starte ihn neu, hat er sofort eine Verbindung.

Wird eventuell Client- Seitig irgendwas (eine FB Client DLL?) zu früh geladen und die behält diesen Status bei oder sowas? Oder woran kann das liegen? Hat jemand eine Idee?

Den Dienst abhängig zu machen vom Firebird- Dienst würde ja auch nichts bringen, da der Dienst auch auf einen entfernten FireBird Server zugreifen muss (ein Server, n Clients inklusive dem Rechner, auf dem der Server liegt).

Langsam weiß ich nicht weiter, wo ich den Fehler noch suchen soll...

omata 15. Aug 2008 15:00

Re: Firebird 2.x: Erste Verbindung zur Datenbank klappt nich
 
Eventuell ist der TCP/TP-Stack noch nicht geladen oder dein Firewall-Vektor gibt die Verbindungen noch nicht frei, weil er noch nicht komplett geladen ist.

Ist nur so eine Idee, vielleicht auch einfach nur blödsinn.

Edit: Kannst du da nicht einfach mal etwas warten und einen Verbindungsaufbau alle 10 Sekunden durchführen lassen. Das würde ich dann vielleicht maximal 20 mal versuchen lassen.

Sorry, mein Edit hast du ja schon ausprobiert.

mkinzler 15. Aug 2008 15:03

Re: Firebird 2.x: Erste Verbindung zur Datenbank klappt nich
 
Du könntest versuchen, deinen Dienst zeitverzögert zu starten

sveni2211 16. Aug 2008 16:24

Re: Firebird 2.x: Erste Verbindung zur Datenbank klappt nich
 
Ich habe jetzt einmal ein paar Zeilen Code eingefügt und verzögere den ersten Verbindungsaufbau um 30 Sekunden.
Damit geht es.

Nur - verstehen tu ich es nicht.

Worin besteht der Unterschied, wenn ich

a) alle 30, bis zu 6x (=3 Minuten) einen Verbindungsaufbau versuche oder
b) 30 Sekunden warte (=30 Sekunden) und dann das erste mal zu verbinden versuche?

Spätestens im zweiten Versuch in Szenario a) müsste es doch auf das selber hinaus laufen, oder?

Elvis 16. Aug 2008 16:44

Re: Firebird 2.x: Erste Verbindung zur Datenbank klappt nich
 
Du solltest den Firebird dienst als Abhängigkeit für deinen Diesnt ablegen.
Dadurch weiß Windows dass es deinen diesnt erst nach Fiebird starten darf.
Verzögerungen sind hier absolut gar keine Lösung, sowas führt 3-mal im Jahr zu einem Problem und NIEMAND hat eine Ahnung woran es lag und der Kunde traut deiner Software (berechtigterweise!) nicht mehr über den Weg.

Neben der Abhängigkeit wäre es auch möglich, dass du den Firebird server nicht über das offizielle Setup im Zielsystem installierst, sondern einfach in einem Unterodner deines Dienstes packst.
Dein Diesnt kann dann beim Hochfahren genau dein Firebird mit einem konfigurierbaren Port hochfahren.

Dadurch wird deine Software keine bestehenden Firebird-Installationen zerstören können und auch andersrum: Ein User, der Firdbird selbst installiert, kann deine Software nicht kaputt machen. :-)

sveni2211 16. Aug 2008 18:27

Re: Firebird 2.x: Erste Verbindung zur Datenbank klappt nich
 
Das Problem dabei ist ja, dass der FireBird nicht auf allen Systemen installiert werden soll/kann. Damit kann ich meinen Dienst nicht von ihm Abhängig machen, da es eben auch Clients gibt, die auf einen entfernten Server zugreifen. Die haben den Dienst FBServer also nicht.

Elvis 16. Aug 2008 18:42

Re: Firebird 2.x: Erste Verbindung zur Datenbank klappt nich
 
Hört sich nach einem weiteren Wert für die Konfigdatei an (DB Host + Port + DBName).

Aber wenn die DB durch deinen Dienst verwaltet werden soll, würde ich an deiner Stelle einen eigenen FB dienst starten, mit einem eigenen Port.‚


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:18 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