MSSQLSERVER_3961MSSQLSERVER_3961

세부 정보Details

제품 이름Product Name SQL ServerSQL Server
이벤트 IDEvent ID 39613961
이벤트 원본Event Source MSSQLSERVERMSSQLSERVER
구성 요소Component SQLEngineSQLEngine
심볼 이름Symbolic Name XACT_METADATA_INVALIDXACT_METADATA_INVALID
메시지 텍스트Message Text "문에서 액세스한 개체가 이 트랜잭션이 시작된 후 다른 동시 트랜잭션의 DDL 문에 의해 수정되어 데이터베이스 '%.ls'에서 스냅숏 격리 트랜잭션이 실패했습니다.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. 메타데이터에 버전이 지정되지 않았으므로 이 트랜잭션은 허용되지 않습니다.It is disallowed because the metadata is not versioned. 스냅숏 격리를 함께 사용하여 메타데이터에 대해 동시 업데이트를 수행하면 일관되지 않은 결과가 발생할 수 있습니다."A concurrent update to metadata can lead to inconsistency if mixed with snapshot isolation.

설명Explanation

스냅숏 격리에서 메타데이터를 쿼리 중이고 스냅숏 격리에서 액세스하는 메타데이터를 업데이트하는 동시 DDL 문이 있을 경우 이 오류가 발생할 수 있습니다.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에서는 메타데이터의 버전 관리를 지원하지 않습니다. does not support versioning of metadata. 따라서 스냅숏 격리에서 실행하는 명시적 트랜잭션에서 수행할 수 있는 DDL 작업에 대한 제한 사항이 있습니다.For this reason, there are restrictions on what DDL operations can be performed within an explicit transaction running under snapshot isolation. 기본적으로 암시적 트랜잭션은 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. ALTER TABLE, CREATE INDEX, CREATE XML INDEX, ALTER INDEX, DROP INDEX, DBCC REINDEX, ALTER PARTITION FUNCTION, ALTER PARTITION SCHEME 또는 CLR(공용 언어 런타임) DDL 문과 같은 DDL 문은 BEGIN TRANSACTION 문 다음에 스냅숏 격리에서 허용되지 않습니다.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. 이러한 문은 암시적 트랜잭션 내에서 스냅숏 격리를 사용할 때 허용됩니다.These statements are permitted when you are using snapshot isolation within implicit transactions. 기본적으로 암시적 트랜잭션은 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.

사용자 동작User Action

메타데이터를 쿼리하기 전에 스냅숏 격리 수준을 커밋된 읽기와 같은 비스냅숏 격리 수준으로 변경합니다.Change the snapshot isolation level to a non-snapshot isolation level such as read committed before querying metadata.