DBAtlas · Atlas für Datenbankbetrieb

3961: Snapshot isolation transaction failed because the object was modified by a DDL statement

SQL Server

Was bedeutet das?

Eine Transaktion unter Snapshot-Isolation ist fehlgeschlagen, weil ein Objekt, auf das sie zugriff, in einer anderen, parallelen Transaktion durch eine DDL-Anweisung (Schemaänderung) geändert wurde. Metadaten werden nicht versioniert, daher kann die Snapshot-Transaktion nicht fortfahren.

Ursache

Während eine unter SNAPSHOT-Isolation gestartete Transaktion (SET TRANSACTION ISOLATION LEVEL SNAPSHOT) läuft, führt eine andere Session DDL wie ALTER TABLE/CREATE INDEX auf einer Tabelle aus, auf die sie zugreift. Snapshot-Transaktionen sehen Zeilenversionen, aber keine Schemaversionen. Unter READ COMMITTED SNAPSHOT (RCSI) tritt dieser Fehler nicht auf; RCSI erstellt für jede Anweisung einen neuen Snapshot.

Lösung

Wiederhole die Transaktion; sie gelingt meist, sobald die DDL abgeschlossen ist. Als dauerhafte Lösung führe Schemaänderungen (DDL) in Wartungsfenstern ohne hohe Snapshot-Last durch. Fange diesen Fehler in der Anwendung ab und implementiere eine automatische Wiederholungslogik. Verkürze lang laufende Snapshot-Transaktionen.

In DBAtlas öffnen →

Weitere Einträge zu dieser Datenbank