最近的一个问题让我看着 MS Documents 并想知道。
可以将多少个备份附加到单个文件是否有限制?
默认情况下,SQL Server 使用NOINIT
将新备份附加到旧备份文件。
{ NOINIT | INIT } 控制备份操作是追加还是覆盖备份媒体上的现有备份集。默认设置是附加到介质上的最新备份集 (NOINIT)。资源
文档清楚地表明,缺少可用磁盘空间将导致附加备份失败。
如果在备份操作将备份附加到媒体集时磁盘文件已满,则备份操作将失败。备份文件的最大大小由磁盘设备上的可用磁盘空间决定;因此,备份磁盘设备的适当大小取决于备份的大小。资源
SQL Recover from .bak file with NOINIT的答案表明Position
fromRESTORE HEADERONLY
表示文件中的单个备份。这是一个“smallint”字段,最大值应为32,767
大多数情况下,在谷歌搜索时,您会发现有人意外地附加了他们的备份,并且无法理解为什么备份如此之大。
假设有足够的磁盘空间,我没有找到任何关于可以附加多少备份的明确参考。限制是 32,767 还是完全其他?
TL:博士;可能会将 32,000 多个备份放在一个文件中。如果这是一件好事,或者您是否可以从该文件的备份中恢复,则此处未提及。
我昨晚开始在没有活动的现有数据库(231682)上进行 tlog 备份。我使用了一个while循环和一个计数器,所以我可以得到一个运行总数。
sp_whoisactive
显示等待信息 (2029ms)BACKUPTHREADsp_whoisactive
显示等待信息 (52113 毫秒)备份之间的 BACKUPTHREAD 时间已减慢到每个日志备份约 70 秒。restore headeronly from disk='G:\SQLBackups\Test_Tlog.trn'
没有尝试数据库还原,因为它会非常痛苦。设置计数器以开始SET @counter = 13717
和重新开始将备份添加到具有相同代码的同一文件中。备份恢复,大约需要 80 秒RAISERROR(N'Count equals :%d', 16, 1, @counter ) WITH LOG;
,因此运行计数显示在SQL 错误日志谢谢@Erik Darlingrestore headeronly from disk='G:\SQLBackups\Test_Tlog.trn'
是 32,021BackupSize
的值和 ~4,000 的 值CompressedBackupSixe
,压缩大小因每个备份而异。我在这个实例上默认压缩备份。
第 3 周 注意:文件大小和备份时间的增长与备份数量不成比例。查看 tlog 标头,我们看到位置 2 的备份大小为 75766 字节,开始到结束的时间为 1 秒或更短。位置 22919 中的备份也具有 75766 字节的大小和一秒或更短的开始到完成时间。将备份附加到同一文件的开销似乎导致速度变慢。异常增长可能与我在实例上运行的每周维护任务有关。
异地备份,我的异地备份解决方案 (IBM Spectrum) 似乎没有备份 trn 文件。我怀疑这是因为文件不断被编辑。
编辑,一段时间后。我正在考虑做另一个实验来测试大约 30,000 个备份的恢复。为了避免尝试恢复多个 t-log 的问题,我研究了使用差异备份。我创建了一个空数据库,进行了完整备份,然后进行了 10 次差异备份。然后我做了 10 个 t-logs 备份并使用
RESTORE HEADERONLY FROM DISK
我比较了大小,差异备份比 t-logs 大得多,我没有足够的空间来进行良好的测试。差异备份 2-10(第一个总是有点大)
T-Logs 备份 2-10(第一个总是大一点)
差异备份大约大 16 倍,最好的情况是我只能得到大约 2,000 个,我目前不做进一步的测试。
除了最大可能的文件大小之外,不应有其他限制。备份文件以Microsoft 磁带格式写入,新的标题只是简单地附加到文件中。
3285。
实际上,就我所知。备份文件达到 10GB,每次备份需要 10 秒,所以我不愿意再等了。
使用: