带有 LOG_BACKUP log_reuse_wait_desc 的 SQL Server 2012 简单恢复模型

Tra*_*vis 11 sql-server sql-server-2012 transaction-log recovery-model

虽然我在做我自己的调查,没有人知道为什么在数据库SIMPLE恢复模型LOG_BACKUPlog_reuse_wait_desc

SQL Server 2012 SP1。几周前创建的数据库。没有复制,没有镜像,没有日志传送,而且从来没有过这些。

我们确实备份了数据库并恢复到另一个实例,它显示SIMPLENOTHINGlog_reuse_wait另一个实例中。但我不认为还原到另一个实例是重现问题的好方法,因为还原操作会前滚/回滚事务。

Tra*_*vis 11

好的,昨天花了一天一夜的时间调查、测试并试图重现问题。找到根本原因:

MODEL数据库设置为SIMPLE恢复模式。

如果模型数据库已设置为SIMPLE恢复模型,并且用户数据库是使用SIMPLE恢复模型创建的,则 SQL Server 会以某种方式将其视为在FULL恢复模型中。因此等待LOG_BACKUP截断日志。

我已在此链接中列出了步骤,以展示我如何重现该问题。

我认为根本原因是如果用户数据库是使用简单恢复模型创建的(而不是之后更改),那么它就会出现这个问题。我将其归咎于模型数据库,因为这是使用定义的恢复模型创建用户数据库的唯一方法。

这在 Microsoft 知识库文章 2830400 中有所记录,并在 SQL Server 2012 SP1 CU4 和 RTM CU7 中得到修复: