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

SQL Anywhere 11.0.1 (Deutsch) » UltraLite - Datenbankverwaltung » Einführung in UltraLite » Transaktions- und Statusverwaltung in UltraLite

 

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.

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.

Weitere Hinweise zur Fehlerbehandlung finden Sie unter:

Programmiertipp

Alle UltraLite-APIs, ausgenommen die C++-API, können im Autocommit-Modus verwendet werden. Einige APIs verwenden Autocommit standardmäßig.

Dieser Standard bedeutet, dass jede Transaktion automatisch nach jedem Vorgang festgeschrieben wird. 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.

Weitere Hinweise finden Sie unter: