DBAtlas · 数据库运维图谱

3961: Snapshot isolation transaction failed because the object was modified by a DDL statement(快照隔离事务失败,因为对象已被 DDL 语句修改)

SQL Server

含义

在快照隔离级别下运行的事务失败,因为它访问的对象被另一个并发事务中的 DDL 语句(架构更改)修改。元数据没有版本控制,因此快照事务无法继续。

原因

在以 SNAPSHOT 隔离级别(SET TRANSACTION ISOLATION LEVEL SNAPSHOT)启动的事务运行期间,另一个会话对其访问的表执行了 ALTER TABLE/CREATE INDEX 等 DDL。快照事务可以看到行版本,但看不到架构版本。在 READ COMMITTED SNAPSHOT(RCSI)下不会出现此错误;RCSI 为每条语句获取新的快照。

解决方法

重试事务;DDL 完成后通常会成功。作为永久方案,在没有大量快照负载的维护窗口内执行架构更改(DDL)。在应用中捕获此错误并实现自动重试逻辑。缩短长时间运行的快照事务。

在 DBAtlas 中打开 →

同一数据库的其他条目