DBAtlas · Atlas d'exploitation des bases de données

3961: Snapshot isolation transaction failed because the object was modified by a DDL statement (échec de la transaction en snapshot isolation : objet modifié par une instruction DDL)

SQL Server

Que signifie cette erreur ?

Une transaction en snapshot isolation a échoué car un objet auquel elle accédait a été modifié par une instruction DDL (changement de schéma) dans une autre transaction concurrente. Les métadonnées ne sont pas versionnées, la transaction snapshot ne peut donc pas continuer.

Cause

Pendant qu'une transaction démarrée en isolation SNAPSHOT (SET TRANSACTION ISOLATION LEVEL SNAPSHOT) s'exécute, une autre session lance du DDL comme ALTER TABLE/CREATE INDEX sur une table à laquelle elle accède. Les transactions snapshot voient les versions de lignes mais pas les versions du schéma. Cette erreur ne se produit pas sous READ COMMITTED SNAPSHOT (RCSI) ; RCSI prend un nouveau snapshot à chaque instruction.

Comment la corriger

Relancez la transaction ; elle réussit généralement une fois le DDL terminé. Comme correctif durable, effectuez les changements de schéma (DDL) pendant des fenêtres de maintenance sans charge snapshot importante. Interceptez cette erreur dans l'application et implémentez une logique de relance automatique. Raccourcissez les transactions snapshot de longue durée.

Ouvrir dans DBAtlas →

Autres entrées pour ce moteur