假设我有一个“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
我刚刚对此进行了快速测试,首先创建我的一个测试数据库的完整备份,删除它,然后运行差异备份。令我惊讶的是,差异备份运行良好,所以我认为它不是从上一个完整备份文件本身出发的。
因此,看起来您确实可以毫无问题地压缩完整备份。我很好奇现在它究竟在哪里确定差异备份的起点,所以我希望有人能告诉我们。