Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die folgenden Isolationsstufen werden für Transaktionen unterstützt, die auf speicheroptimierte Tabellen zugreifen.
SCHNAPPSCHUSS
WIEDERHOLBARES LESEN
SERIALISIERBAR
Gelesen mit Bestätigung
Die Transaktionsisolationsstufe kann als Teil des Atomblocks einer nativ kompilierten gespeicherten Prozedur angegeben werden. Weitere Informationen finden Sie unter CREATE PROCEDURE (Transact-SQL). Beim Zugriff auf speicheroptimierte Tabellen aus interpretierten Transact-SQL kann die Isolationsebene mithilfe von Hinweisen auf Tabellenebene angegeben werden.
Sie müssen die Transaktionsisolationsstufe angeben, wenn Sie eine nativ kompilierte gespeicherte Prozedur definieren. Sie müssen die Isolationsebene in Tabellenhinweisen angeben, wenn Sie auf speicheroptimierte Tabellen aus Benutzertransaktionen in interpretierten Transact-SQL zugreifen. Weitere Informationen finden Sie unter Richtlinien für Transaktionsisolationsstufen mit Memory-Optimized Tabellen.
Die Isolationsstufe READ COMMIT wird für speicheroptimierte Tabellen mit AutoCommit-Transaktionen unterstützt. READ COMMITTED ist in Benutzertransaktionen oder in einem atomaren Block ungültig. READ COMMITTED wird mit expliziten oder impliziten Benutzertransaktionen nicht unterstützt. Isolationsebene READ_COMMITTED_SNAPSHOT wird für speicheroptimierte Tabellen mit Autocommit-Transaktionen unterstützt und nur, wenn die Abfrage nicht auf datenträgerbasierte Tabellen zugreift. Darüber hinaus können Transaktionen, die mit der interpretierten Methode Transact-SQL bei SNAPSHOT-Isolation gestartet werden, nicht auf speicheroptimierte Tabellen zugreifen. Transaktionen, die Transact-SQL mit WIEDERHOLBARER LESE- oder SERIALIZABLE-Isolation interpretiert werden, müssen mithilfe der SNAPSHOT-Isolation auf speicheroptimierte Tabellen zugreifen. Weitere Informationen zu diesem Szenario finden Sie unter "Containerübergreifende Transaktionen".
READ COMMITTED ist die Standardisolationsstufe in Microsoft SQL Server. Wenn die Isolationsebene der Sitzung READ COMMITED (oder niedriger) ist, können Sie eine der folgenden Aktionen ausführen:
Verwenden Sie explizit einen Hinweis auf eine höhere Isolationsstufe für den Zugriff auf die speicheroptimierte Tabelle (z. B. WITH (SNAPSHOT)).
Geben Sie die
MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT-Setoption an, die die Isolationsstufe für speicheroptimierte Tabellen auf SNAPSHOT festlegt (als ob Sie zu jeder speicheroptimierten Tabelle WITH(SNAPSHOT)-Hinweise hinzugefügt hätten). Weitere InformationenMEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOTfinden Sie unter ALTER DATABASE SET Options (Transact-SQL).
Wenn die Isolationsebene der Sitzung "READ COMMITTED" ist, können Sie auch Autocommit-Transaktionen verwenden.
SNAPSHOT-Transaktionen, die in interpretierten Transact-SQL gestartet wurden, können nicht auf speicheroptimierte Tabellen zugreifen.
Die für speicheroptimierten Tabellen unterstützten Transaktionsisolationsstufen bieten die gleichen logischen Garantien wie datenträgerbasierte Tabellen. Der Mechanismus für die Bereitstellung von Isolationsstufengarantien unterscheidet sich.
Bei datenträgerbasierten Tabellen werden die meisten Isolationsebenengarantien mithilfe der Sperrung implementiert, wodurch Konflikte durch Blockieren verhindert werden. Für speicheroptimierte Tabellen werden die Garantien durch einen Konflikterkennungsmechanismus erzwungen, der die Notwendigkeit von Sperren vermeidet. Die Ausnahme ist die SNAPSHOT-Isolation in festplattenbasierten Tabellen. Dies wird ähnlich wie die SNAPSHOT-Isolation bei speicheroptimierten Tabellen implementiert, wobei ein Konflikterkennungsmechanismus verwendet wird.
SCHNAPPSCHUSS
Diese Isolationsstufe gibt an, dass Daten, die von einer Anweisung in einer Transaktion abgerufen werden, die transaktional konsistente Version der Daten sind, die zu Beginn der Transaktion vorhanden sind. Die Transaktion kann nur Datenänderungen registrieren, die vor Beginn der Transaktion festgeschrieben wurden. Datenänderungen, die von anderen Transaktionen nach dem Start der aktuellen Transaktion vorgenommen wurden, sind für anweisungen, die in der aktuellen Transaktion ausgeführt werden, nicht sichtbar. Die Anweisungen in einer Transaktion erhalten eine Momentaufnahme der festgeschriebenen Daten, wie sie zu Beginn der Transaktion vorhanden waren.
Schreibvorgänge (Aktualisierungen, Einfügungen und Löschvorgänge) sind immer vollständig von anderen Transaktionen isoliert. Daher können die Schreibvorgänge in einer SNAPSHOT-Transaktion mit Schreibvorgängen durch andere Transaktionen in Konflikt geraten. Wenn die aktuelle Transaktion versucht, eine Zeile zu aktualisieren oder zu löschen, die von einer anderen Transaktion aktualisiert oder gelöscht wurde, die nach dem Start der aktuellen Transaktion zugesichert wurde, wird die Transaktion mit der folgenden Fehlermeldung beendet.
Fehler 41302. Die aktuelle Transaktion hat versucht, einen Datensatz in Tabelle X zu aktualisieren, der seit dem Start dieser Transaktion aktualisiert wurde. Die Transaktion wurde abgebrochen.
Wenn die aktuelle Transaktion versucht, eine Zeile mit demselben Primärschlüsselwert wie eine Zeile einzufügen, die von einer anderen Transaktion eingefügt wurde, die vor der aktuellen Transaktion zugesichert wurde, tritt ein Fehler beim Commit mit der folgenden Fehlermeldung auf.
Fehler 41325. Die aktuelle Transaktion konnte aufgrund eines serialisierbaren Validierungsfehlers nicht abgeschlossen werden.
Wenn eine Transaktion in eine Tabelle schreibt, die gelöscht wird, bevor die Transaktion abgeschlossen wird, endet die Transaktion mit der folgenden Fehlermeldung:
Fehler 41305. Die aktuelle Transaktion konnte aufgrund eines Validierungsfehlers bei einer Repeatable-Read-Leseoperation nicht abgeschlossen werden.
WIEDERHOLBARES LESEN
Diese Isolationsstufe enthält die Garantien der SNAPSHOT-Isolationsstufe. Darüber hinaus garantiert REPEATABLE READ, dass für jede Zeile, die von der Transaktion gelesen wurde, zum Zeitpunkt des Abschlusses der Transaktion die Zeile nicht von einer anderen Transaktion geändert wurde. Jeder Lesevorgang in der Transaktion kann bis zum Ende der Transaktion wiederholt werden.
Wenn die aktuelle Transaktion eine Zeile gelesen hat, die dann vor der aktuellen Transaktion von einer anderen Transaktion aktualisiert und abgeschlossen wurde, schlägt der Commit mit der folgenden Fehlermeldung fehl.
Fehler 41305. Die aktuelle Transaktion konnte aufgrund eines Validierungsfehlers bei einer Repeatable-Read-Leseoperation nicht abgeschlossen werden.
SERIALISIERBAR
Diese Isolationsstufe enthält die Garantien, die von REPEATABLE READ gewährt werden. Zwischen der Momentaufnahme und dem Ende der Transaktion wurden keine Phantomzeilen angezeigt. Phantomzeilen entsprechen der Filterbedingung einer Auswahl, Aktualisierung oder Löschung.
Die Transaktion wird ausgeführt, als ob keine gleichzeitigen Transaktionen vorhanden sind. Alle Aktionen erfolgen praktisch an einem einzelnen Serialisierungspunkt (Commit-Zeit).
Wenn eine dieser Garantien verletzt wird, schlägt die Transaktion mit der folgenden Fehlermeldung fehl:
Fehler 41325. Die aktuelle Transaktion konnte aufgrund eines serialisierbaren Validierungsfehlers nicht abgeschlossen werden.
Siehe auch
Grundlegendes zu Transaktionen in Memory-Optimized Tabellen
Richtlinien zu den Isolationsstufen von Transaktionen mit Memory-Optimized-Tabellen
Richtlinien für die Wiederholungslogik für Transaktionen in Memory-Optimized Tabellen