MSSQLSERVER_3961MSSQLSERVER_3961

DettagliDetails

Nome prodottoProduct Name SQL ServerSQL Server
ID eventoEvent ID 39613961
Origine eventoEvent Source MSSQLSERVERMSSQLSERVER
ComponenteComponent SQLEngineSQLEngine
Nome simbolicoSymbolic Name XACT_METADATA_INVALIDXACT_METADATA_INVALID
Testo del messaggioMessage Text Transazione di isolamento snapshot non riuscita nel database '%. * ls' perché l'oggetto a cui accede l'istruzione è stato modificato da un'istruzione DDL in un'altra transazione simultanea fin dall'inizio di questa transazione.Snapshot isolation transaction failed in database '%.*ls' because the object accessed by the statement has been modified by a DDL statement in another concurrent transaction since the start of this transaction. Operazione non consentita perché il controllo della versione non viene applicato ai metadati.It is disallowed because the metadata is not versioned. Un aggiornamento simultaneo nei metadati può provocare un'inconsistenza se si utilizza anche l'isolamento snapshot.A concurrent update to metadata can lead to inconsistency if mixed with snapshot isolation.

SpiegazioneExplanation

Questo errore può verificarsi se si esegue una query nei metadati sotto isolamento snapshot e c'è un'istruzione DDL simultanea che aggiorna i metadati a cui si accede sotto isolamento dello snapshot.This error can occur if you are querying metadata under snapshot isolation and there is a concurrent DDL statement that updates the metadata that is being accessed under snapshot isolation. SQL ServerSQL Server non supporta il controllo delle versioni dei metadati. does not support versioning of metadata. Per questo motivo, esistono limitazioni sulle operazioni DDL che è possibile eseguire in una transazione esplicita che viene eseguita con l'isolamento dello snapshot.For this reason, there are restrictions on what DDL operations can be performed within an explicit transaction running under snapshot isolation. Per definizione, una transazione implicita è una sola istruzione che rende possibile l'applicazione della semantica dell'isolamento dello snapshot, anche con le istruzioni DDL.An implicit transaction, by definition, is a single statement which makes it possible to enforce the semantics of snapshot isolation even with DDL statements. Le istruzioni DDL seguenti non sono permesse con l'isolamento dello snapshot dopo un'istruzione BEGIN TRANSACTION: ALTER TABLE, CREATE INDEX, CREATE XML INDEX, ALTER INDEX, DROP INDEX, DBCC REINDEX, ALTER PARTITION FUNCTION, ALTER PARTITION SCHEME o qualsiasi istruzione DDL di Common Language Runtime (CLR).The following DDL statements are not permitted under snapshot isolation after a BEGIN TRANSACTION statement: ALTER TABLE, CREATE INDEX, CREATE XML INDEX, ALTER INDEX, DROP INDEX, DBCC REINDEX, ALTER PARTITION FUNCTION, ALTER PARTITION SCHEME, or any common language runtime (CLR) DDL statement. Queste istruzioni sono permesse quando viene utilizzato l'isolamento dello snapshot all'interno di transazioni implicite.These statements are permitted when you are using snapshot isolation within implicit transactions. Per definizione, una transazione implicita è una sola istruzione che rende possibile l'applicazione della semantica dell'isolamento dello snapshot, anche con le istruzioni DDL.An implicit transaction, by definition, is a single statement which makes it possible to enforce the semantics of snapshot isolation even with DDL statements.

Azione dell'utenteUser Action

Spostare il livello di isolamento dello snapshot su un livello di isolamento non snapshot ad esempio Read committed prima di eseguire una query sui metadati.Change the snapshot isolation level to a non-snapshot isolation level such as read committed before querying metadata.