Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

SET TRANSACTION - Transaktionseigenschaften festlegen

Mit SET TRANSACTION können Sie Isolations- bzw. Konsistenzlevel und Transaktionsmodus der nachfolgenden SQL-Transaktion festlegen.

Der Isolations- bzw. Konsistenzlevel einer Transaktion gibt an, wie stark das Lesen von Sätzen in der Transaktion durch gleichzeitige Schreibzugriffe einer konkurrierenden Transaktion beeinflusst wird.

Mit dem Transaktionsmodus können Sie bestimmen, ob innerhalb der nachfolgenden Transaktion Tabellensätze nur gelesen oder auch geändert werden dürfen.

ACHTUNG! Wenn Sie einen Isolations- bzw. Konsistenzlevel festlegen, beeinflussen Sie auch den Grad an Parallelität und damit die Performanz: je mehr Phänomene ausgeschlossen werden, desto geringer ist der Grad an Parallelität.

Die mit SET TRANSACTION getroffenen Einstellungen sind nur für die SQL-Anweisungen der unmittelbar folgenden Transaktion gültig. Nach Ende oder Rücksetzen der Transaktion gelten wieder die Voreinstellungen (siehe Abschnitt „Voreinstellung"). Die Voreinstellungen gelten nach Ende der Transaktion auch dann wieder, wenn die auf SET TRANSACTION folgende Transaktion allein CALL-DML-Anweisungen, also keine SQL-Anweisungen enthält.

Die Anweisung SET TRANSACTION leitet keine Transaktion ein und darf nur außerhalb einer SQL-Transaktion verwendet werden.



SET TRANSACTION { level [[,] transaktionsmodus ] | transaktionsmodus [[,] level ] }


transaktionsmodus ::= { READ ONLY | READ WRITE }

level ::= { ISOLATION LEVEL isolation-level | CONSISTENCY LEVEL konsistenzlevel }

isolation-level ::=

{
   READ UNCOMMITTED |
   READ COMMITTED |
   REPEATABLE READ |
   SERIALIZABLE
}



Sie können das Komma zwischen den beiden Angaben weglassen. Soll Ihre Anwendung portierbar sein, müssen Sie allerdings das Komma setzen.


ISOLATION LEVEL

Isolationslevel einstellen.

Arbeiten mehrere Transaktionen gleichzeitig mit denselben Tabellen, können Phänomene eintreten, in denen Lesezugriffe in einer Transaktion durch gleichzeitige schreibende Zugriffe einer anderen Transaktion beeinflusst werden. Mit dem Isolationslevel legen Sie fest, welche dieser Phänomene in den nachfolgenden SQL-Transaktionen zugelassen sein sollen.

Folgende Phänomene sind von Bedeutung:

    • dirty read:
      Eine Transaktion ändert einen Satz oder nimmt einen Satz neu auf. Eine zweite Transaktion liest diesen Satz, bevor die erste Transaktion die Änderung festgeschrieben hat. Wird die erste Transaktion zurückgesetzt, hat die zweite Transaktion einen Satz gelesen, der nie festgeschrieben worden ist.

    • non-repeatable read:
      Eine Transaktion liest einen Satz. Bevor diese Transaktion beendet wird, ändert oder löscht eine zweite Transaktion denselben Satz und schreibt die Änderung fest. Versucht danach die erste Transaktion diesen Satz nochmals zu lesen, werden entweder geänderte Werte zurückgegeben oder ein Fehler, weil der Satz inzwischen gelöscht wurde. Die Leseoperation liefert also ein anderes Ergebnis als beim ersten Mal.

    • phantom:
      Eine Transaktion liest Sätze, die eine bestimmte Suchbedingung erfüllen. Anschließend nimmt eine zweite Transaktion Sätze auf, die ebenfalls diese Suchbedingung erfüllen. Wiederholt die erste Transaktion danach die Abfrage, enthält die Ergebnistabelle auch die neu aufgenommenen Sätze.


READ UNCOMMITTED

Isolationslevel, der den geringsten Schutz vor konkurrierenden Transaktionen bietet. Alle oben beschriebenen Phänomene sind möglich. In der nachfolgenden SQL-Transaktion können gelesene Sätze noch nicht festgeschrieben sein und von anderen Transaktionen nach dem Lesen geändert werden.

READ UNCOMMITTED ist nicht zulässig, wenn gleichzeitig der Transaktionsmodus READ WRITE festgelegt wurde.


READ COMMITTED

Die Phänomene non-repeatable read und phantom können auftreten. In der nachfolgenden SQL-Transaktion können gelesene Sätze von anderen Transaktionen nach dem Lesen geändert werden. Es werden keine Sätze gelesen, die noch nicht festgeschrieben sind.


REPEATABLE READ

Das Phänomen phantom kann auftreten. Die Phänomene non-repeatable read und dirty read sind nicht möglich.


SERIALIZABLE

Vollständiger Schutz vor konkurrierenden Transaktionen ist gewährleistet. Die Phänomene dirty read, non-repeateable read und phantom können nicht auftreten. Die Existenz konkurrierender Transaktionen ist für die nachfolgende Transaktion nicht sichtbar.


CONSISTENCY LEVEL

Alternativ zum Isolationslevel bietet SESAM/SQL aus Gründen der Aufwärtskompatibilität zu früheren Versionen auch die Klausel CONSISTENCY LEVEL an. Damit definieren Sie einen Konsistenzlevel, der analog zum Isolationslevel festlegt, ob die Phänomene dirty read, non-repeatable read und phantom auftreten können.


konsistenzlevel

Vorzeichenlose Ganzzahl, mit: 0 <= konsistenzlevel <= 4.

Level

gesetzte Sperren

gelesene Sätze

0

Gelesene Sätze werden nicht
gegen Ändern durch andere Transaktionen
gesperrt.

alle Sätze, auch die von anderen
Transaktionen gegen Änderungen
gesperrten Sätze

1

Gelesene Sätze werden gegen
Änderungen durch andere Transaktionen
(bis Transaktionsende)
gesperrt, außer wenn diese schon
gesperrt sind.

wie bei 0

2

wie bei 0

nur die Sätze, die nicht von anderen
Transaktionen gegen Ändern
gesperrt sind

3

Gelesene Sätze werden gegen
Änderungen durch andere Transaktionen
(bis Transaktionsende)
gesperrt.

wie bei 2

4

Gelesene Sätze werden wie bei 3
gesperrt. Bei nicht vorhandenen
Sätzen wird durch Sperren gegen
Änderungen von anderen Transaktionen
sichergestellt, dass sie nicht
von anderen Transaktionen eingefügt
werden können.

wie bei 2

Tabelle 53: Konsistenzlevel


Die folgende Tabelle zeigt die Zuordnung von Konsistenz- zu Isolationslevel und welche Phänomene jeweils auftreten können.

Isolationslevel

Konsistenzlevel

dirty read

non-repeatable
read

phantom

READ UNCOMMITTED

0

x

x

x

-

1

x

x 1

x

READ COMMITTED

2

-

x

x

REPEATABLE READ

3

-

-

x

SERIALIZABLE

4

-

-

-

Tabelle 54: Zuordnung Isolationslevel, Konsistenzlevel und Phänomene

1das Phänomen non-repeatable read kann nur für Sätze auftreten, die vorher mit dirty read gelesen wurden.


READ ONLY

Transaktionsmodus READ ONLY einstellen.

Innerhalb der Transaktion sind nur lesende Datenbankzugriffe möglich. READ ONLY ist Voreinstellung beim Isolationslevel READ UNCOMMITTED bzw. den Konsistenzleveln 0 und 1.


READ WRITE

Transaktionsmodus READ WRITE einstellen.

Innerhalb der Transaktion sind lesende und schreibende Datenbankzugriffe möglich. READ WRITE ist Voreinstellung bei den Isolationsleveln READ COMMITTED, REPEATABLE READ und SERIALIZABLE bzw. bei den Konsistenzleveln 2, 3 und 4.

READ WRITE ist nicht zulässig, wenn gleichzeitig der Isolationslevel READ UNCOMMITED festgelegt wurde.

Voreinstellung

Existiert für Isolations- bzw. Konsistenzlevel ein Konnektionsmodul-Eintrag in der benutzerspezifischen Konfigurationsdatei (siehe „ Basishandbuch“), wird dieser Wert als Voreinstellung genommen. Andernfalls sind der Isolationslevel SERIALIZABLE, der Konsistenzlevel 4 und der Transaktionsmodus READ WRITE voreingestellt.

Über den Operanden MAX-ISOLATION-LEVEL der DBH-Option TRANSACTION-SECURITY kann für einen DBH der Isolationslevel REPEATABLE READ eingestellt werden. Arbeitet Ihre SQL-Anwendung mit einem derart eingestellten DBH, muss eine der folgenden Bedingungen erfüllt sein:

    • Die Konfigurationsdatei muss den Konnektionsmodul-Parameter
      ISOL-LEVEL=REPEATABLE-READ (bzw. einen niedrigeren Isolationslevel) enthalten oder

    • Über die SQL-Anweisung SET TRANSACTION müssen Sie vor jeder Transaktion den Isolationslevel auf REPEATABLE READ begrenzen.

Geltungsbereich unter openUTM

In einer UTM-Anwendung verliert die Anweisung SET TRANSACTION ihre Gültigkeit mit dem Ende der aktuellen UTM-Transaktion. Da in einer UTM-Transaktion jeweils nur eine Datenbank-Transaktion ablaufen kann, müssen SET TRANSACTION und die dazugehörige SQL-Transaktion in der gleichen UTM-Transaktion durchgeführt werden.