我仍在努力理解 SQL 的备份作业。
我们目前有一个使用完整恢复模型的 SQL Server 2005 实例。
我们每周都会进行一次完整的数据库备份。
BACKUP DATABASE [MyDatabase]
TO DISK = N'E:\Database Backups\MyDatabase.Bak'
WITH INIT, NAME = N'MyDatabase.Bak'
并且每天进行一次差异备份
BACKUP DATABASE [MyDatabase]
TO DISK = N'E:\Database Backups\MyDatabase_Diff.Bak'
WITH INIT, DIFFERENTIAL, NAME = N'MyDatabase_Diff.Bak'
现在我想弄清楚如何安排每小时的事务日志备份,所以我们最多会损失一个小时的工作。
BACKUP LOG [MyDatabase]
TO DISK = N'E:\Database Backups\MyDatabase_Log.Bak'
我的问题是,我们的存储空间有限,我不希望日志文件变得太大。我可以WITH INIT
在事务日志备份上使用强制它每小时创建一个新文件吗?或者我是否需要自上次差异备份以来的所有事务日志备份才能恢复到一天中的特定时间点?
如果我确实需要保留自上次差异以来的所有副本,有没有办法告诉它在我进行备份时重置?
不,不要
WITH INIT
用于将事务日志备份到同一文件。如果这样做,您最好不要在完整/差异备份之间使用它们。通常,您每次都会将日志备份到唯一的文件中。每一个都将在名称中包含某种形式的时间戳,并具有 .trn 扩展名而不是 .bak。这主要用于管理目的 - 它可以很容易地识别何时进行日志备份,何时可以安全删除,是否应该成为您的时间点恢复操作的一部分等。
感谢您发布。
如果您的事务日志与数据文件位于不同的磁盘阵列上,则在数据阵列发生故障时执行“日志备份尾部” 。这将确保最小的数据丢失,因此您甚至不会丢失那个小时。
不,至于您的下一个问题,您将需要在最后一次差异备份之后的每个事务日志备份来执行任何“时间点”恢复。不要覆盖它们,保留它们,否则它们将毫无用处。
您可能想查看OlaHallgren的 SQL MVP 最推荐的备份/维护脚本之一,它为您执行了大量的错误处理和优化。如果您不想要 1 个大文件,则需要为每个事务日志备份指定一个新文件名,以便在需要时将它们全部恢复。
在紧急情况下,请查看这篇关于如何生成恢复脚本的帖子,但如果您不想这样做,请仔细检查您是否没有在生产环境中运行它们。它会覆盖您的数据库。首先在不同的服务器上测试它们。