Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird 2.1 - Stoppen von Queries nach Client-Crash (https://www.delphipraxis.net/151780-firebird-2-1-stoppen-von-queries-nach-client-crash.html)

mquadrat 1. Jun 2010 14:06

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBX

Firebird 2.1 - Stoppen von Queries nach Client-Crash
 
Hallo zusammen,

über die MON$STATEMENT Systemtabelle kann man ja länger laufende Queries mittels delete Befehl abbrechen. Problem an der Geschichte: Zwar werden die Statements wohl abgebrochen aber laut FB Bug-Tracker bleibt der Status solange auf active bis der Client den Cursor freigibt. Was aber nun, wenn der Client aufgrund eines Crashs zu dem Zeitpunkt nicht mehr vorhanden ist?

Ich hatte konkret den Fall, dass sich scheinbar zwei Instanzen meines Programmes so dämlich gegenseitig in die Quere gekommen sind, dass eine Schreibquery "hängen" geblieben ist. Ergebnis: ich habe ein laufendes Update-Statement (zumindest mit Status aktiv in der MON$STATEMENT) hinter das sich alle anderen Queries einreihen und brav warten. Den Client-Prozess gibt es nicht mehr entsprechend kommt auch keine Nachricht über das Schließen des Cursors zurück. In 2.1 kann man auch keine Attachments komplett löschen. Somit war die einzige Idee, die ich hatte Firebird komplett runterzufahren (Dienst beenden). Nachteil ist natürlich, dass die wartenden Schreibzugriffe nicht ausgeführt wurden.

Gibt es für solch eine Situation (FB wartet auf einen Client, den es nicht mehr gibt) eine andere Lösung? Mit 2.5 könnte ich das Attamchment löschen. Das würde ja auch helfen. Nur ist mit 2.5 halt erst im zweiten Quartal zu rechnen.


Gruß

Markus

hoika 3. Jun 2010 11:51

Re: Firebird 2.1 - Stoppen von Queries nach Client-Crash
 
Hallo,

Zitat:

FB wartet auf einen Client, den es nicht mehr gibt
Das sollte aber nach X Sekunden erledigt sein.
FB pingt die aktuellen Clients periodisch an (stay alive packets).

Meldet sch der Client nicht, wird die Verbindung von FB geschlossen
Wie schnell das gehen soll, steht in der firebird.conf,
das ganze geschieht auch nicht sofort, sondern FB fragt AFAIK 3 mal nach).

Lies dir mal die Infos unter ConnectionTimeout durch,
aber nicht das # wegmachen ;)


Heiko

Blup 4. Jun 2010 07:04

Re: Firebird 2.1 - Stoppen von Queries nach Client-Crash
 
Das funktioniert leider nicht immer, insbesondere in Verbindung mit Terminalserver...

mquadrat 7. Jun 2010 07:00

AW: Firebird 2.1 - Stoppen von Queries nach Client-Crash
 
Ich schau mir die Config mal an, aber ich habe definitiv ein offenes Attachement gehabt, dass noch zwei Tage nach dem Crash der Client-Anwendung da war.

Bernhard Geyer 7. Jun 2010 07:03

AW: Re: Firebird 2.1 - Stoppen von Queries nach Client-Crash
 
Zitat:

Zitat von Blup (Beitrag 1025750)
Das funktioniert leider nicht immer, insbesondere in Verbindung mit Terminalserver...

Wenn deine Verbindung zum Terminalserver abbricht läuft ja dein Desktop noch weiter. Dies wäre für kein DBMS eine Abbruchkriterium.

mquadrat 7. Jun 2010 07:09

AW: Firebird 2.1 - Stoppen von Queries nach Client-Crash
 
Naja, je nachdem wie der Terminalserver eingestellt ist. Gibt ja auch Beenden nach Inaktivität.

Blup 7. Jun 2010 08:29

AW: Firebird 2.1 - Stoppen von Queries nach Client-Crash
 
Ich meinte das der Datenbankserver das Beenden einer Session auf dem Terminalserver nicht unbedingt mitbekommt..., ansonsten wäre das natürlich normal. Ist aber nur ein Beispiel, auch normale Clients sind manchmal betroffen. Allerdings verwenden wir in erster Linie Interbase, deshalb kann ich nicht sagen ob Firebird anders reagiert.


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