3961: Snapshot isolation transaction failed because the object was modified by a DDL statement
SQL ServerNe demek?
Snapshot yalıtım düzeyinde çalışan transaction, eriştiği nesnenin başka bir eşzamanlı transaction'daki bir DDL komutuyla (şema değişikliği) değiştirilmesi nedeniyle başarısız oldu. Meta veri sürümlenmediği için snapshot transaction'ı bu durumda devam edemez.
Neden olur?
SNAPSHOT yalıtım düzeyinde (SET TRANSACTION ISOLATION LEVEL SNAPSHOT) başlamış bir transaction sürerken, başka bir oturumun eriştiği tabloda ALTER TABLE/CREATE INDEX gibi DDL çalıştırması. Snapshot transaction'ları veri sürümlerini görebilir ama şema sürümlerini göremez. READ COMMITTED SNAPSHOT (RCSI) altında bu hata oluşmaz; RCSI her ifade için yeni bir snapshot alır.
Nasıl çözülür?
İşlemi yeniden deneyin; DDL tamamlandıktan sonra genellikle başarılı olur. Kalıcı çözüm için şema değişikliklerini (DDL) yoğun snapshot iş yükünün olmadığı bakım pencerelerinde yapın. Uygulamada bu hatayı yakalayıp otomatik yeniden deneme (retry) mantığı uygulayın. Uzun süren snapshot işlemlerini kısaltın.
Aynı motorda diğer kayıtlar
- 3902The COMMIT TRANSACTION request has no corresponding 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