在另一个 SQL 服务器上执行备份时,事务日志文件大小会保留

Transaction log file size carry over when performing a backup on another SQL Server

我们的生产服务器有一个大型 .ldf 文件 (300 GB) 与一个 .mdf 文件关联。在我们的 DEV 服务器上,我们不时使用生产备份来恢复 DEV 数据库。由于我们的 DEV 服务器不应该有很多与之关联的事务,但 .ldf 文件也是 300 GB。我将 .ldf 文件缩小到 50 GB。从生产备份恢复后,DEV .ldf 文件会再次增长吗?

您可能有一个 运行 和 运行 的后台任务,或者有很多打开的(长 运行)事务阻止了日志的备份和收缩。我敢打赌,同样的事情也会发生在你的新机器上。您需要找出阻止事务日志收缩的原因。你不应该自己缩小它。

当您还原数据库备份时,数据库和日志文件的大小将与原始数据库中的文件大小相同。因此,如果 prod 中的文件大小为 300 GB,那么当您将其恢复到另一个 database/server 时,它将是 300 GB。将 prod 数据库备份恢复到开发环境后,通常会做两件事 - 缩小日志文件大小,并将恢复模型设置为 SIMPLE(是否执行任何一项取决于您的 needs/requirements)。

由于您将文件大小减小到 50 GB,由于多种原因它可能会增长到超过 50 GB,但最值得注意的是:

  • 您创建了一个产生大量日志的事务
  • 你有完整的恢复模式,而且你生成了很多日志,而且从不做日志备份
  • 您启用了某种复制功能(复制、CDC 等)并且从不 运行 logreader 代理。

Will the DEV .ldf file grow again after a restore from a production backup?

是的,如果您的生产数据库日志文件仍然有这样的大小 - 300 GB,您的开发数据库将再次有这样的日志文件。

我们不知道您的实时数据库的基线是什么。

但是,如果您的生产数据库没有导致长期 运行 事务的常规繁重 DML 操作,请考虑将生产日志文件的大小减小到更小的大小,例如减小到 50 GB。

此外,这种减少将显着减少恢复时间,因为 LDF 文件将在 RESTORE 开始写入实际数据之前在内部清零。这意味着 SQL 服务器首先必须创建 300 GB 的文件并在其中写入零。与日志文件相比,数据文件可以受益于 "instant file initialization",如果 SQL 服务器实例服务帐户正确配置为具有足够的权限,则可以跳过此类清零。

否则,每次恢复到开发环境时,都需要完成这样的维护任务:

USE yourDev
ALTER DATABASE yourDev SET RECOVERY SIMPLE
-- assumption: only one ldf in db
DBCC SHRINKFILE(2, 1024)