2010-07-16 165 views
2

我每天都运行一个脚本(只有2天至今)来备份我的数据库:SQL Server:为什么不同备份的大小相同?

sqlcmd -E -S server-hl7\timeclockplus -i timeclockplus.sql 
move "C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Backup\*.*" w:\ 

为什么是它从两个不同日期的备份在字节完全相同的大小?我知道一个事实,那就是数据库已经改变了!

+2

数据库预先分配空间,填补了这个空间,直到它需要成长,再成长为一个新的预分配的大小。 – 2010-07-16 16:06:27

回答

8

数据库文件(* .mdf,* .ldf)以块的形式分配 - 例如,他们使用给定数量的兆字节,直到该空间被填满,然后分配另一块(几兆字节)。

将性能分配给您添加到数据库中的每个单字节将会非常糟糕。

由于这种基于块的分配,在特定时间段内给定大小是绝对正常的 - 即使正在使用数据库并正在添加和删除数据。

+1

因此,如果您压缩备份文件(使用zip/7zip),您应该看到它们确实会因为其中存在不同数量的“数据”而发生变化。 – 2010-07-16 16:42:05

+1

是的,但备份只写入分配的页面。如果.bak文件的大小相同,则表示正在使用相同数量的页面,这是可能的,但在活动数据库中不太可能。我肯定会仔细检查备份脚本,看它是否实际替换了旧备份,或者到目前为止获得的两个备份不是同一文件的两个副本。最后,在另一台机器上进行备份恢复,查看它包含的内容。 – 2010-07-16 17:20:54

+0

joel非常感谢你非常有帮助cmoment – 2010-07-16 19:05:02

1

SQL Server备份只包含数据页面。一页是8k。如果您每天的更改不会添加或删除页面(例如删除,添加),则要备份的页面数保持不变。

尝试在备份文件的CRC校验来看看有什么变化?

+0

我该如何执行此操作? – 2010-07-16 16:26:29

+0

第三方工具:http://www.mindworkshop.com/crc.html – gbn 2010-07-16 16:31:16

相关问题