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) » SQL Anywhere Server - SQL-Benutzerhandbuch » Datenbanken erstellen » Transaktionen und Isolationsstufen verwenden » Funktionsweise von Sperren

 

Schemasperren

Schemasperren werden benutzt, um Änderungen eines Datenbankschemas zu serialisieren und um sicherzustellen, dass Transaktionen, die eine Tabelle verwenden, nicht durch Schemaänderungen beeinträchtigt werden, die durch andere Verbindungen initiiert werden. Eine Schemasperre könnte beispielsweise verhindern, dass eine ALTER TABLE-Anweisung eine Spalte aus einer Tabelle löscht, wenn diese Tabelle von einem geöffneten Cursor über eine andere Verbindung gelesen wird.

Es gibt zwei Klassen von Schemasperren:

  • Gemeinsame Sperren   Das Tabellenschema wird im gemeinsam genutzten (Lese-)Modus gesperrt.

  • Exklusivsperren   Das Tabellenschema wird für die exklusive Verwendung durch eine einzelne Verbindung gesperrt.

Eine gemeinsame Schemasperre wird gesetzt, wenn sich eine Transaktion direkt oder indirekt auf eine Tabelle in der Datenbank bezieht. Gemeinsame Schemasperren verursachen keine gegenseitigen Konflikte. Beliebig viele Transaktionen können gleichzeitig gemeinsame Sperren für die gleiche Tabelle setzen. Die gemeinsame Schemasperre bleibt bestehen, bis die Transaktion durch COMMIT oder ROLLBACK abgeschlossen wird.

Eine Verbindung, die eine gemeinsam genutzte Schemasperre hält, kann Tabellendaten ändern, sofern die Änderung nicht mit anderen Verbindungen in Konflikt steht.

Eine exklusive Schemasperre wird gesetzt, wenn das Schema einer Tabelle geändert wird, normalerweise durch die Verwendung einer DDL-Anweisung. Die Anweisung ALTER TABLE ist ein Beispiel einer DDL-Anweisung, die eine exklusive Sperre für die Tabelle setzt, bevor sie sie ändert. Eine exklusive Schemasperre für eine Tabelle kann immer nur von einer Verbindung gesetzt werden—alle anderen Versuche, das Schema einer Tabelle zu sperren (gemeinsam oder exklusiv) führen zur Blockierung oder zu einer Fehlermeldung. Dies bedeutet, dass eine Verbindung auf Isolationsstufe 0, der Isolationsstufe mit den geringsten Einschränkungen, keine Zeilen aus einer Tabelle lesen kann, deren Schema im exklusiven Modus gesperrt wurde.

Nur die Verbindung, die die exklusive Tabellenschemasperre hält, kann die Tabellendaten ändern.