Skip to main content

Deadlock-Fehler

Bei einem Schreibbefehl auf einen Datenbank-Transaktion erhält die Datenbank-Zeile einen Deadlock. Der Deadlock wird nach Abschluss der Transaktion wieder aufgehoben. Wird während des Deadlocks ein weiterer Schreibbefehl auf den Datenbank-Eintrag ausgeführt, wird ein Deadlock-Fehler ausgegeben. Der Fehler entsteht somit auf der Datenbank.

Die umgesetzten Lösungen können lediglich versuchen, Schreibbefehle auf die Datenbank zu minimieren und ein entsprechendes Fehler-Handling anzubieten. Die Gentable-Funktion "gentable.insertIntoDB()" schreibt zum Beispiel die Rechnungs-Positionen in die Tabelle "invoice_posting_pos". Die Funktion wird bei jedem Speichern einmalig ausgeführt. Die Datenbank-Tabelle

Gerade im Rechnungs-Workflow bei Rechnungen mit Bestelltbezug sind

 

Es folgt eine Beispiel-Fehlerausgabe eines MS SQL-Servers. Als Lösung schlägt der SQL-Server vor, die Transaktion erneut auszuführen.

ReturnCode: -1
SqlState: 40001
NativeError: 1205
ErrorMsg: [Microsoft][ODBC SQL Server Driver][SQL Server]Transaction (Process ID 92) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
.. this.Result:=false

Ab der Invoice-Version 2.0.200 wird dieser Vorschlag befolgt.