Angeben der Isolationsstufe

Da die Isolationsstufe festlegt, wie Daten von anderen Prozessen während des Zugriffs auf die Daten isoliert werden, sollten Sie eine Isolationsstufe auswählen, die die Anforderungen des gemeinsamen Zugriffs und der Datenintegrität angemessen gegeneinander abwägt.

Informationen zu dieser Task

Die Isolationsstufe, die Sie angegeben, gilt für die Dauer der UOW (Unit of Work, Arbeitseinheit). Die folgenden heuristischen Methoden können verwendet werden, um die Isolationsstufe zu bestimmen, die zum Kompilieren einer SQL- oder XQuery-Anweisung verwendet wird:
  • Für statisches SQL:
    • Wenn eine isolation-klausel in der Anweisung angegeben wird, wird der Wert dieser Klausel verwendet.
    • Wenn keine isolation-klausel in der Anweisung angegeben wird, wird die Isolationsstufe verwendet, die für das Paket angegeben war, als das Paket an die Datenbank gebunden (BIND) wurde.
  • Für dynamisches SQL:
    • Wenn eine isolation-klausel in der Anweisung angegeben wird, wird der Wert dieser Klausel verwendet.
    • Wenn keine isolation-klausel in der Anweisung angegeben wird und die Anweisung SET CURRENT ISOLATION in der aktuellen Sitzung abgesetzt wurde, wird der Wert des Sonderregisters CURRENT ISOLATION verwendet.
    • Wenn keine isolation-klausel in der Anweisung angegeben wird und die Anweisung SET CURRENT ISOLATION in der aktuellen Sitzung nicht abgesetzt wurde, wird die Isolationsstufe verwendet, die für das Paket angegeben war, als das Paket an die Datenbank gebunden (BIND) wurde.
  • Für statische oder dynamische XQuery-Anweisungen legt die Isolationsstufe der Umgebung die Isolationsstufe fest, die bei der Auswertung des XQuery-Ausdrucks verwendet wird.
Hinweis: Viele kommerziell geschriebene Anwendungen bieten eine Methode zur Auswahl der Isolationsstufe. Informationen dazu finden Sie in der Dokumentation zur jeweiligen Anwendung.

Die Isolationsstufe kann auf verschiedene Arten angegeben werden.

Prozedur

  • Auf Anweisungsebene oder Unterauswahlebene:
    Hinweis: Isolationsstufen für XQuery-Anweisungen können nicht auf Anweisungsebene angegeben werden.

    Verwenden Sie die Klausel WITH. Die Option WITH UR gilt nur für Operationen mit Lesezugriff. Anderenfalls wird die Anweisung automatisch von UR in CS geändert.

    Diese Isolationsstufe setzt die Isolationsstufe außer Kraft, die für das Paket angegeben ist, in dem die Anweisung enthalten ist. Für die folgenden SQL-Anweisungen können Sie eine Isolationsstufe angeben:
    • DECLARE CURSOR
    • Searched DELETE
    • INSERT
    • SELECT
    • SELECT INTO
    • Searched UPDATE
  • Für dynamisches SQL in der aktuellen Sitzung:

    Verwenden Sie die Anweisung SET CURRENT ISOLATION, um die Isolationsstufe für dynamisches SQL festzulegen, die innerhalb einer Sitzung abgesetzt wird. Durch die Ausführung dieser Anweisung wird das Sonderregister CURRENT ISOLATION auf einen Wert gesetzt, der die Isolationsstufe für alle dynamischen SQL-Anweisungen angibt, die innerhalb der aktuellen Sitzung abgesetzt werden. Sobald es festgelegt ist, gibt das Sonderregister CURRENT ISOLATION die Isolationsstufe für alle nachfolgenden dynamischen SQL-Anweisungen an, die innerhalb der Sitzung kompiliert werden, unabhängig davon, welches Paket die Anweisung abgesetzt hat. Diese Isolationsstufe ist wirksam, bis die Sitzung beendet wird oder bis SET CURRENT ISOLATION ...Die Anweisung RESET wird ausgegeben.

  • Beim Vorkompilieren oder Binden:

    Für eine Anwendung, die in einer unterstützten kompilierten Sprache geschrieben ist, verwenden Sie die Option ISOLATION der Befehle PREP oder BIND. Sie können die Isolationsstufe auch über die API sqlaprep bzw. sqlabndx angeben.

    • Wenn Sie beim Vorkompilieren eine Bindedatei erstellen, wird die Isolationsstufe in der Bindedatei gespeichert. Wenn Sie beim Binden keine Isolationsstufe angeben, wird standardmäßig die beim Vorkompilieren verwendete Isolationsstufe verwendet.
    • Wenn Sie keine Isolationsstufe angeben, wird die Standardisolationsstufe 'Cursorstabilität' (CS) verwendet.
    Führen Sie zur Feststellung der Isolationsstufe eines Pakets die folgende Abfrage aus:
    select isolation from syscat.packages
      where pkgname = 'pkgname'
        and pkgschema = 'pkgschema'
    Dabei ist paketname der nicht qualifizierte Name des Pakets und paketschema der Schemaname des Pakets. Beide Namen müssen vollständig in Großbuchstaben angegeben werden.
  • Bei der Arbeit mit JDBC oder SQLJ zur Laufzeit:
    Hinweis: JDBC und SQLJ werden mit der Befehlszeilenschnittstelle auf Db2® -Servern implementiert. Dies bedeutet, dass sich die db2cli.ini -Einstellungen auf das auswirken können, was mit JDBC und SQLJ geschrieben und ausgeführt wird.

    Zur Erstellung eines Pakets (und zur Angabe der zugehörigen Isolationsstufe) in SQLJ verwenden Sie die SQLJ-Profilanpassungsfunktion (Befehl db2sqljcustomize).

  • Über CLI oder ODBC zur Laufzeit:

    Verwenden Sie den Befehl CHANGE ISOLATION LEVEL. Mit DB2 Call-level Interface (CLI) können Sie die Isolationsstufe bei der CLI-Konfiguration ändern. Verwenden Sie während der Ausführung die Funktion SQLSetConnectAttr mit dem Attribut SQL_ATTR_TXN_ISOLATION, um die Transaktionsisolationsstufe für die aktuelle Verbindung zu festzulegen, auf die durch das Argument ConnectionHandle verwiesen wird. Sie können auch das Schlüsselwort TXNISOLATION in der Datei db2cli.ini verwenden.

  • Auf Datenbankservern, die REXX unterstützen:

    Wenn eine Datenbank erstellt wird, werden mehrere Bindedateien, die die verschiedenen Isolationsstufen für SQL in REXX unterstützen, an die Datenbank gebunden. Andere Befehlszeilenprozessorpakete (CLP-Pakete) werden ebenfalls an die Datenbank gebunden, wenn eine Datenbank erstellt wird.

    REXX und der CLP stellen eine Verbindung zu einer Datenbank mit der Standardisolationsstufe CS her. Durch eine Änderung dieser Isolationsstufe wird der Status der Verbindung nicht geändert.

    Um die Isolationsstufe zu bestimmen, die von einer REXX-Anwendung verwendet wird, überprüfen Sie den Wert der vordefinierten REXX-Variablen SQLISL. Der Wert wird jedes Mal aktualisiert, wenn der Befehl CHANGE ISOLATION LEVEL ausgeführt wird.

  • Ändern der für neue Sitzungen verwendeten Standardisolationsstufe:
    Die für dynamisches SQL in einer neuen Sitzung verwendete normale Standardisolationsstufe wird durch die Isolationsstufe des in dieser Sitzung verwendeten Pakets festgelegt. Dieser Wert kann während der Verarbeitung von der Anwendung geändert werden; darüber hinaus kann der Datenbankadministrator die Standardisolationsstufe außerhalb der Anwendung durch Implementierung eines der folgenden Elemente ändern: