3961: Snapshot isolation transaction failed because the object was modified by a DDL statement
SQL ServerWas 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.
Weitere Einträge zu dieser Datenbank
- 3902The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION (COMMIT ohne zugehöriges BEGIN TRANSACTION)
- 1101Could not allocate a new page because of insufficient disk space in filegroup
- 3729Cannot DROP because it is being referenced by object
- 1785Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths
- 9421XML parsing: illegal xml character
- 15151Cannot find the object/principal because it does not exist or you do not have permission
- 4834You do not have permission to use the bulk load statement