Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (Deutsch) » UltraLite - Datenbankverwaltung » UltraLite Performance-Tipps » Performance-Tipps für Einfügen und Aktualisieren » Transaktions- und Zeilenstatusverwaltung

 

UltraLite-Transaktionsverarbeitung

Eine Transaktion ist eine logische Gruppe von Vorgängen, die automatisch durchgeführt werden. Daher werden entweder alle Vorgänge der Transaktion in der Datenbank gespeichert oder gar kein Vorgang. Der Zugriff einer UltraLite-Anwendung auf die UltraLite-Laufzeitanwendung ist serialisiert. Wenngleich mehrere Transaktionen gleichzeitig geöffnet sein können, kann UltraLite jeweils nur eine einzelne Transaktion verarbeiten. Das bedeutet, dass Folgendes für eine Anwendung nicht möglich ist:

  • Blockierte Transaktionen (so genannte Deadlocks). UltraLite blockiert nie eine Anforderung basierend auf einer vorhandenen Zeilensperre. In diesem Fall gibt UltraLite sofort einen Fehler zurück.

  • Überschreiben von ausstehenden Änderungen. Eine Transaktion kann die ausstehenden Änderungen einer anderen Transaktion nicht überschreiben. Wenn eine Transaktion eine Zeile ändert, sperrt UltraLite diese Zeile, bis die Transaktion festgeschrieben oder zurückgesetzt wird. Die Sperre verhindert, dass andere Transaktionen die Zeile ändern, aber sie können die Zeile trotzdem lesen.

Tipp

Alle UltraLite-APIs, ausgenommen die UltraLiteJ- und C++-APIs, können im autocommit-Modus verwendet werden.

Im Autocommit-Modus führt UltraLite nach jedem Vorgang ein COMMIT aus. Einige APIs verwenden Autocommit standardmäßig. Wenn Sie eine dieser Schnittstellen einsetzen, müssen Sie die Autocommit-Funktion ausschalten, um die Vorteile von Transaktionen mit mehreren Vorgängen zu nutzen. Wie Sie die Autocommit-Funktion ausschalten, hängt von der verwendeten Programmierschnittstelle ab. Bei den meisten Schnittstellen ist diese Funktion eine Eigenschaft des Verbindungsobjekts.

Siehe:

Beispiel: Zwei Anwendungen, A und B, lesen dieselbe Zeile aus der Datenbank und berechnen jeweils basierend auf den gelesenen Daten neue Werte für eine ihrer Spalten. Wenn A die Zeile mit ihrem neuen Wert aktualisiert und B dann versucht, dieselbe Zeile zu ändern, erhält B einen Fehler. Ein Versuch, eine gesperrte Zeile zu ändern, verursacht den SQLCODE-Fehler SQLE_LOCKED, während ein Versuch, eine gelöschte Zeile zu ändern, den Fehler SQLE_NOTFOUND hervorruft. Sie sollten daher Ihre Anwendung so programmieren, dass sie nach dem Versuch, die Daten zu ändern, den SQLCODE-Wert prüft.

 Siehe auch