完整/差异备份——用什么来确定差异备份内容?

完整/差异备份——用什么来确定差异备份内容?

假设我有一个“MyDB”SQL Server 2005 数据库(简单恢复),我在周日进行一次完整备份,每隔一晚进行一次差异备份

BACKUP DATABASE [MyDB] TO DISK = N'c:\Database Backups\MyDB\MyDB_Full.bak'
    WITH NOFORMAT, INIT, NAME = N'MyDB.BAK', SKIP, NOREWIND, NOUNLOAD, STATS =
    10

BACKUP DATABASE [MyDB] TO DISK = N'c:\Database Backups\MyDB\MyDB_Diff.bak'
    WITH NOINIT, DIFFERENTIAL, NAME= 'MyDB.BAK', STATS= 10

差异备份过程使用什么来决定在差异备份日备份哪些数据?它是否需要 mydb_full.bak 文件来执行其任务?

如果我想节省磁盘空间,我可以在创建 mydb_full.bak 文件后将其压缩为 .zip 文件,而不会对差异备份产生不利影响,如果我需要恢复,只需在开始之前解压缩完整备份吗?

答案1

不 - 差异备份不使用完整备份文件本身作为参考。您可以(并且应该!)安全地将完整备份转储移动到另一台机器或任何您喜欢的地方。

SQL Server 在内部存储了脏区(自上次完整备份以来已更改的数据库部分)的位图,当您运行差异备份时,它会查阅位图并仅将数据库更改的部分写入备份。

答案2

我刚刚对此进行了快速测试,首先创建我的一个测试数据库的完整备份,删除它,然后运行差异备份。令我惊讶的是,差异备份运行良好,所以我认为它不是从上一个完整备份文件本身出发的。

因此,看起来您确实可以毫无问题地压缩完整备份。我很好奇现在它究竟在哪里确定差异备份的起点,所以我希望有人能告诉我们。

相关内容