【问题标题】:Backup of SQL Server database without timestamps备份没有时间戳的 SQL Server 数据库
【发布时间】:2011-12-15 20:22:03
【问题描述】:

我正在使用以下行来备份 Microsoft SQL Server 2008 数据库:

BACKUP DATABASE @name TO DISK = @fileName WITH COMPRESSION

鉴于数据库没有变化,重复执行这一行会产生大小相同但内部大不相同的文件。

如何为相同的未更改数据库创建重复的 SQL Server 备份,以提供相同的字节精确文件?我猜想简单的BACKUP DATABASE 调用会在备份媒体中添加一些时间戳或一些其他元信息,有没有办法禁用或删除这个添加?

或者,如果不可能,是否有一种相对简单的方法来比较 2 个备份,看看它们是否会恢复到完全相同的数据库状态?

更新:对于备份比较,我的观点是我每天要备份无数数据库,但大多数数据库不会经常更改。他们中的大多数人每年更换几次是正常的。所以,基本上,对于所有其他 DBMS(MySQL、PostgreSQL、Mongo),我使用以下算法:

  • 进行新的每日备份
  • 新备份与最新旧备份的区别
  • 如果数据库未更改(即备份匹配),请删除我刚刚创建的新每日备份

该算法适用于我们之前遇到的所有 DBMS,但遗憾的是,由于不可重复的 MSSQL 备份,它失败了。

【问题讨论】:

    标签: sql-server backup database-backups


    【解决方案1】:

    正如您猜测的那样,备份目录的一部分包括备份的日期和时间。 WITH COMPRESSION 选项会压缩备份以节省空间,但由于压缩算法的工作方式,文件中的微小变化会导致整个文件发生变化。

    如果您不希望有太多差异,请删除压缩选项,但比较备份文件不是可行的方法。

    如果您有一个变化不大的数据库,那么增量或差异备份可能更有用。

    但是,当您询问的是您尝试的解决方案而不是您的实际问题时,您似乎陷入了一个名为XY Problem 的经典陷阱。是什么促使您尝试比较数据库?

    【讨论】:

    • 我尝试省略压缩,但没有帮助 - 文件仍然不同。我进行此比较的初衷是备份优化,我在问题中添加了对备份算法的详细描述。
    • 元数据信息正在使用 Microsoft Tape 格式写入媒体标头,请参阅 msdn.microsoft.com/en-us/library/ms178062.aspx 我认为没有办法将两者分开,除非您使用第 3 方备份工具。
    • 有办法解决吗?例如,要计算某种哈希值来显示数据库的状态已经改变?
    • 总是用最新的备份替换旧的备份。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多