適用対象:SQL Server
詳細
| 属性 | 値 |
|---|---|
| 製品名 | SQL Server |
| イベント ID | 3961 |
| イベント ソース | MSSQLSERVER |
| コンポーネント | SQLEngine |
| シンボル名 | XACT_METADATA_INVALID |
| メッセージ テキスト | データベース '%.*ls' でスナップショット分離トランザクションが失敗しました。ステートメントからアクセスされるオブジェクトが、このトランザクションの開始後に別の同時トランザクションの DDL ステートメントで変更されました。 メタデータはバージョン管理されないため、この操作は許可されません。 メタデータに対する同時更新は、スナップショット分離と組み合わせると一貫性を損なう結果になる可能性があります。 |
説明
このエラーは、スナップショット分離でメタデータのクエリを実行していて、かつスナップショット分離でアクセスされているメタデータを更新する同時 DDL ステートメントがある場合に発生することがあります。 SQL Server では、メタデータのバージョン管理はサポートされません。 このため、スナップショット分離で実行されている明示的なトランザクション内で実行できる DDL 操作には制限があります。 定義によると、暗黙のトランザクションとは、DDL ステートメントについてもスナップショット分離のセマンティクスの実行を可能にする単一ステートメントです。 以下のDDL文は、BEGIN TRANSACTION 文後のスナップショット分離で許可されません: ALTER TABLE、 CREATE INDEX、 CREATE XML INDEX、 ALTER INDEX、 DROP INDEX、DBCC REINDEX、 ALTER PARTITION FUNCTION、 ALTER PARTITION SCHEME、または任意の共通言語ランタイム(CLR)DDL文。 暗黙のトランザクション内でスナップショット分離を使用しているときには、これらのステートメントは許可されます。 定義によると、暗黙のトランザクションとは、DDL ステートメントについてもスナップショット分離のセマンティクスの実行を可能にする単一ステートメントです。
ユーザーの操作
スナップショット分離レベルをスナップショット以外の分離レベル (メタデータに対してクエリを実行する前の READ COMMITTED など) に変更します。