问题是我真的不需要 t-tlog 并且我希望避免它。我查看了很多主题,但还没有找到我需要的答案(MSSQL 备份主题在各个方面都很难理解)。
我的数据库是这样制作的:
- 15个配置数据表
- 3 个每月有大量行的表(总计每月 30M-50M 行)
- 每天晚上写入/更新当月数据
- 仅存储过去几个月的数据(不再更改)
- 分区:
- 1 个主分区
- 1 个配置数据分区
- 月份数据的 n 个分区(每个月 1 个分区)
每天晚上,许多进程都会重新计算所有月份的数据;每天早上与前一天相比几乎没有什么变化。这还意味着:与很少的最终数据机会相比,有巨大的事务日志)。
我有这个进程/备份配置:
- 夜间处理数据
- 每个周日早上进行完整备份
- 周一至周六上午差异备份
- T-日志备份
当我恢复数据时,顺序应该是:
- 完整备份的恢复
- 恢复自上次完整备份以来的所有差异备份
- 恢复自上次完整备份以来的所有 T-Log 备份
- 尾部备份的恢复
例如,周三:
- 尾部日志备份
- 恢复第一天(周日)的完整备份
- 恢复第 2、3、4 天(周一、周二、周三)的差异备份
- 恢复第 2、3、4 天(周一、周二、周三)的 t-log 备份
- 尾部日志的恢复,WITH RECOVERY
我的问题如下。
问题 1:既然我已经恢复了所有差异备份,为什么我需要自上次完整以来的所有日志备份?为什么自上次差异备份以来仅 t-Log 还不够?
问题 2:我可以仅恢复完整备份和差异备份,并使数据库联机而不恢复日志吗?
问题3:经过夜间数据处理后,我确定其他数据没有改变。这意味着当我早上进行差异备份时,我不需要存储巨大的t-Log数据。我可以之前截断事务日志Log Backup
吗?或者我可以完全避免t-log备份吗?
问题 4:我实际上并不需要完整的 T-Log,但我选择FULL recovery mode
而不是SIMPLE mode
因为出于实际原因我想将不同分区的备份拆分到不同的文件中。是否还有其他配置,或者您对此有什么建议?
问题5:由于过去几个月的数据不会改变,所以我不需要每次进行完整备份时都备份这些数据。有没有办法混合过去的备份(过去每个月的)和新的备份(主要数据、操作数据和当月的)?
多谢。(我知道这件事很难精确。如果有任何一点没有得到很好的解释,请告诉我,我会尽力做得更好。)
是的
否。差异备份是累积的,因此只应恢复最后一次差异备份
否。仅恢复差异备份后的日志备份。
仅当您参与日志传送时。在其他情况下,您不会创建尾日志备份。
例如,在星期三: 恢复第 1 天的完整备份(星期日) 恢复第 4 天的差异备份(星期三) 星期三之后恢复 t-log 备份,直到所需的恢复点
应该够了。尝试恢复(无论如何你都必须练习恢复)并在失败时提供错误消息
是的。它将处于 diff 备份完成时的状态。
我不确定你想解决什么问题。你有巨大的日志文件吗?基本上在完全恢复模式下,您必须运行日志备份以防止日志文件增长。
所以你的意思是你不需要时间点恢复,但你使用完整恢复模式进行部分备份/恢复。看起来您需要分段恢复https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/piecemeal-restores-sql-server?view=sql-server-ver16 对于简单的恢复模式,您应该将您的旧文件组声明为只读 https://learn.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options?view=sql -服务器版本16
在这种情况下,您可以从备份和恢复中跳过只读文件组
是的。您应该在每周备份语句中使用 READ_WRITE_FILEGROUPS 子句 https://learn.microsoft.com/en-us/sql/t-sql/statements/backup-transact-sql?view=sql-server-ver16#read_write_filegroups---文件组---逻辑文件组名称--逻辑文件组名称_var---n--
但是,如果您尝试写入只读表空间中的任何对象,您的调用将会失败。
不是一个出色的备份专家,但我会尝试:
说了这么多,您应该重新检查数据库上发生的情况。日志文件不会自行增长。如果它们确实发生了,就意味着确实发生了一些事情。但如果我完全确定不需要日志备份,我会避免使用完全恢复模式。
我还会考虑归档过程 - 将所有旧数据移动到其他服务器\数据库并使用相对较小的数据库,因此备份不会很大。