最近的一个问题让我看着 MS 文档并感到疑惑。
可以将多少个备份附加到单个文件是否有限制?
默认情况下,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 循环和一个计数器,所以我可以得到一个运行总数。
DECLARE @counter int
SET @counter = 1
While 1=1
Begin
BACKUP LOG [231682] TO
DISK = N'G:\SQLBackups\Test_Tlog.trn' WITH NOFORMAT, NOINIT,
NAME = N'231682-Log Database Backup', SKIP, NOREWIND, NOUNLOAD
SET @counter = @counter + 1
print @counter
End
Run Code Online (Sandbox Code Playgroud)
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'
Count检查备份为 32,021BackupSize
的值和 ~4,000 的值,CompressedBackupSixe
每个备份的压缩大小各不相同。我在这个实例上默认压缩备份。
第 3 周 注意:文件大小和备份时间与备份数量不成比例。查看 tlog 标头,我们看到位置 2 中的备份大小为 75766 字节,开始到完成时间为一秒或更短。位置 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 个,此时我不做进一步的测试。
归档时间: |
|
查看次数: |
615 次 |
最近记录: |