IBM PureData System for Analytics, Version 7.1

LOCK TABLE

Mit dem LOCK TABLE-Befehl können Sie eine Tabelle in der aktuellen Datenbank sperren. Der Sperrmodus gibt den Typ der anzufordernden Sperre an.

Der LOCK TABLE-Befehl ist erfolgreich, wenn eine Sperre mit dem angegebenen Modus für die Tabelle angefordert werden kann. Der Befehl wartet so lange wie erforderlich auf das Abrufen der Sperre, wenn Sie nicht die Option NOWAIT angeben, die bewirkt, dass der Befehl die Transaktion abbricht, falls er die Sperre nicht sofort anfordern kann.

Eine Sperre ist aktiv, bis für die Transaktion ein Commit durchgeführt wird oder die Transaktion abgebrochen wird. Wenn LOCK TABLE implizit (d. h. nicht in einem BEGIN-/COMMIT-Paar) abgesetzt wird, fordert der Befehl die Sperre an, sobald dies zulässig ist, und gibt sie dann sofort frei, da er eine Einzelanweisungstransaktion ist, die nach Abschluss des Befehls implizit ein Commit durchführt.

Soweit dies möglich ist, sollten LOCK TABLE-Befehle vor Abfragen in der Transaktion abgesetzt werden. Das Anfordern einer Sperre nach dem Absetzen einer Abfrage für Benutzertabellen schützt eine Transaktion nicht zwangsläufig vor Serialisierungsfehlern.

Wenn Sie planen, LOCK TABLE-Befehle innerhalb einer Transaktion für mehrere Tabellen abzusetzen, setzen Sie die Befehle in einer Reihenfolge ab, die von der Anwendung festgelegt wird. Dies minimiert die Möglichkeit von Deadlocks. Wenn ein Deadlock auftritt, bricht Postgres eine der am Deadlock beteiligten Transaktionen ab.

Sperrmoduskonflikte

In der folgenden Tabelle ist die Matrix von Sperrenkonflikten dargestellt, die besagt, welche Sperren andere Typen von Sperren blockieren können. Ein Sperrmodus steht im Konflikt mit einem anderen Modus, falls einer Transaktion eine Sperre nicht erteilt werden kann, wenn eine andere Transaktion ebenfalls eine Sperre für dieselbe Tabelle definiert. Sperren, die von derselben Transaktion definiert werden, stehen nicht im Konflikt miteinander; eine Transaktion kann Sperren mit verschiedenen Modi für dieselbe Tabelle definieren. Wenn mehrere Sperren für dieselbe Tabelle angefordert werden sollen, fordern Sie stärkere Sperren zuerst an, um die Möglichkeit von Deadlocks zu minimieren. Wenn eine Transaktion zwei Sperren für dieselbe Tabelle benötigt, wobei keine von beiden stärker ist (insbesondere SHARE und ROW EXCLUSIVE), ist es oft sinnvoll, einen Sperrmodus zu verwenden, der beide Modi umfasst, wie SHARE ROW EXCLUSIVE.

Tabelle 1. Sperrenkompatibilitätsmatrix
  ACCESS SHARE ROW SHARE ROW EXCLUSIVE SHARE SHARE ROW EXCLUSIVE EXCLUSIVE ACCESS EXCLUSIVE
ACCESS SHARE OK OK OK OK OK OK Konflikt
ROW SHARE OK OK OK OK OK Konflikt Konflikt
ROW EXLUSIVE OK OK OK Konflikt Konflikt Konflikt Konflikt
SHARE OK OK Konflikt OK Konflikt Konflikt Konflikt
SHARE ROW EXCLUSIVE OK OK Konflikt Konflikt Konflikt Konflikt Konflikt
EXCLUSIVE OK Konflikt Konflikt Konflikt Konflikt Konflikt Konflikt
ACCESS EXCLUSIVE Konflikt Konflikt Konflikt Konflikt Konflikt Konflikt Konflikt

Syntax

Syntax zum Sperren einer Tabelle:
LOCK TABLE <Tabelle> in <Sperrmodus> MODE [NOWAIT]

Eingaben

Der LOCK TABLE-Befehl akzeptiert folgende Eingaben:

Tabelle 2. Eingaben für LOCK TABLE
Eingabe Beschreibung
<Tabelle> Der Name der zu sperrenden Tabelle.
<Sperrmodus> Der für die Tabelle anzufordernde Sperrentyp (siehe Tabelle 3). Das Wort ROW in einem Sperrmodus bezeichnet keine Sperre auf Zeilenebene.
NOWAIT Der Befehl soll einen Fehler zurückgeben und die Transaktion abbrechen, wenn er die erforderliche Sperre nicht sofort anfordern kann.
Tabelle 3. Sperrmodi
Sperrmodus Angefordert von Erforderliche Berechtigungen Hinweis
ACCESS SHARE SELECT Auswählen Dies ist der schwächste Sperrmodus. Mehrere Transaktionen können diese Art der Sperre für eine Tabelle definieren.
ROW SHARE   Einfügen, löschen oder aktualisieren Mehrere Transaktionen können diese Art der Sperre für eine Tabelle definieren.
ROW EXCLUSIVE INSERT, DELETE und UPDATE Einfügen, löschen oder aktualisieren Mehrere Transaktionen können diese Art der Sperre für eine Tabelle definieren.
SHARE CREATE MATERIALIZED VIEW und GENERATE STATISTICS Auswählen oder Genstats Mehrere Transaktionen können diese Art der Sperre für eine Tabelle definieren.
SHARE ROW EXCLUSIVE   Einfügen, löschen oder aktualisieren  
EXCLUSIVE   Einfügen, löschen oder aktualisieren  
ACCESS EXCLUSIVE DROP TABLE, ALTER TABLE und TRUNCATE TABLE Löschen, ändern oder abschneiden  

Ausgaben

Der LOCK TABLE-Befehl hat die folgenden Ausgaben:

Tabelle 4. Ausgaben von LOCK TABLE
Ausgabe Beschreibung
LOCK TABLE Der Befehl war erfolgreich.
NOTICE: LOCK TABLE issued after query against user tables Wenn ein LOCK TABLE-Befehl abgesetzt wird, nachdem die Transaktion eine Abfrage für Benutzertabellen abgesetzt hat, zeigt das System eine NOTICE-Nachricht an und der Befehl ist erfolgreich, wenn er die erforderliche Sperre anfordern kann.

Berechtigungen

Sie müssen der Benutzer mit Administratorberechtigung, der Eigner der Tabelle oder der Eigner der Datenbank oder des Schemas sein, in der/dem die Tabelle definiert ist, oder Ihr Konto muss die entsprechenden Objektberechtigungen haben, wie sie in Tabelle 3 beschrieben sind.

Verwendung

Es folgt ein Verwendungsbeispiel.
LOCK TABLE customers IN ROW EXCLUSIVE MODE;


Feedback | Copyright IBM Corporation 2014 | Letzte Aktualisierung: 2014-02-28