Gesperrter Datensatz nach Programmabsturz

Liebe 4D Experten,

wir haben leider vereinzelt das Problem, dass nach einem Programmabsturz Datensätze, die der Benutzer unmittelbar vor dem Absturz bearbeitet hat, gesperrt bleiben. Am Server sieht man den Anwendungsprozess in der Prozess-Liste nicht mehr, der Datensatz ist aber trotzdem vom Anwendungsprozess des Benutzers gesperrt. Der Prozess wurde also unsauber beendet.

Auch wenn der Benutzer neu einsteigt, wo automatisch ein unload sämtlicher Datensätze passiert, bleibt der Datensatz gesperrt.

Die Datensätze werden erst nach einem Server-Neustart wieder freigegeben. Gibt es eine Möglichkeit ohne Server-Neustart die Datensätze wieder freizugeben?

Wir arbeiten mit der 4D-Version 16.3.

Danke & Liebe Grüße!

Elisabeth Strassmair

: Elisabeth STRASSMAIR

dass nach einem Programmabsturz…Der Prozess wurde also unsauber
beendet.

ja, wenn der Rechner abgestürzt ist wurde der Prozess nicht korrekt beendet, nicht vermeidbar.

: Elisabeth STRASSMAIR

Auch wenn der Benutzer neu einsteigt, wo automatisch ein unload
sämtlicher Datensätze passiert, bleibt der Datensatz gesperrt.

Ja. Ein Anwender kann nicht Datensätze eines anderen Anwenders (auch wenn dieser den gleichen Namen hat) freigeben. Jeder Prozess kann nur seine eigenen Daten freigeben.

Prüfen Sie auf dem Server wie der Timeout bei Client/Server eingestellt ist.
Steht dieser z. B. auf 1 Stunde, dann dauert es auch eine Stunde bis gesperrte Datensätze, Transaktionen, Semaphoren, etc, freigeben werden.

Danke für die rasche Antwort!

Das Timeout liegt bei den “Client-Server” Einstellungen am Server unter “Network options” bei 10 Minuten. Der Absturz war vor ca. 2 Stunden, und der Datensatz ist nach wie vor gesperrt.

Was kann ich sonst noch versuchen?

Mag sein, der time out ist per Code temporaer umgesetzt. Dann sagt der Wert hier nicht viel.
Mag sein, der Client startet eine stored procedure, die sperrt.
Mag aber auch ein generelles Netzwerkproblem sein dass der Server nicht merkt, dass der Client nicht mehr da ist. Alte oder neue Netzwerkkomponente?

Die Database Parameter “4D Server timeout” und “4D Remote mode timeout” werden jeweils im Code auf 10 Minuten gesetzt.
Wir verwenden die legacy Netzwerk-Schicht, da uns die neue ziemliche Probleme verursachte.
Den Aufruf einer stored Procedure sehe ich hier nicht, der Datensatz wird ganz normal mit “Modify Record” geöffnet.

Gibt es nicht irgendeine Möglichkeit per Code die Prozesse abzufragen und ggf. den sperrenden Prozess zu killen? Auf der Server-Oberfläche wird der Prozess nicht mehr angezeigt, aber per Code kommt man da sicher irgendwie dran, oder? Da es doch relativ selten vorkommt wär mir ein Workaround auf diese Art auch recht.

ja sicher könnten Sie am Server laufende Prozesse per Programmierung abfragen. Wenn wir hier aber einen Prozeß haben, der in einem inkosistenten Zustand ist, wird das wohl nicht funktionieren. Und das wir so einen Zustand haben, sehen Sie daran, daß er im Serverfenster nicht mehr auftaucht, aber dennoch irgendwie da ist. Diese Kombination habe ich bislang noch nicht gesehen. Selbst im Fall von Netzwerkproblemen bleib der Prozeß bisher auch im Verwaltungsfenster.

Aber wie auch immer. Sie können ja mal schauen, ob Ihnen Cout tasks aufgerufen am Server irgendetwas bringt. Vielleicht bleibt ja nacgh Crash auch noch irgendeine Transaktion aktiv?

Ohne das genauer zu untersuchen, werde ich da jetzt auch keine besseren Ratschläge liefern können.

Ist es denn jederzeit nachvollziehbar?