对于具有少量表和大量不可变数据的大型数据库,最佳 SQL 服务器备份策略是什么?

Mar*_*ark 6 performance sql-server backup sql-server-2017

我们有一个大型数据库(500GB 并且正在扩展)。95% 以上的数据存储在 3 个表中(一个表有 20 亿多行)。数据在很大程度上是不可变的 - 即一旦添加,它就只能在之后读取。我们无法存档旧数据。

我们正在使用允许压缩备份的 SQL Server 2017,但即便如此,备份和通过网络复制到备份服务器也需要很长时间。

我们想加快这个过程(并且出于灾难恢复目的,在云中备份 - 可能是 Azure) - 差异备份足够小,但我认为我们仍然需要定期进行完整备份(例如每个周末完整备份)每晚的差异对我们来说仍然是一个问题)

我的感觉是使用分区来分割一些合理列上的大表(集群在身份 ID 上),然后我们可以只备份旧分区一次并将它们标记为只读,而无需再次全部备份。

这不是一个理想的情况,因为我们将来需要不断添加更多分区。此外,数据库无法关闭超过几分钟,所以我想我将不得不使用分区制作数据的影子版本,然后进行一些切换,以减少停机时间,这有点冒险和复杂。

如果有人对这种数据库配置有他们认为会更好的备份策略(或者可以确认考虑到我的限制,这似乎是一个好主意)我很高兴听到:)

附加信息:

当前备份计划:

  1. 完整备份(每晚) - 压缩备份大约100 GB(500 GB 未压缩),大约需要40 分钟(压缩)

  2. 日志备份(每 10 分钟) - 几乎是即时的,每个只有大约 20 MB。

现在我知道,对于某些人来说,40 分钟并不是很长的时间,100 GB 也不是一个很大的文件,但我也知道,鉴于 95% 以上的数据是不可变的,并且只能安全备份一次,备份可能需要不到几分钟的时间,并且可能需要几 GB(这是保守的)。

我相信分区是用于帮助管理备份的工具之一,特别是对于这种类型的场景,我希望让有实际经验的人(或我的场景中基于 SQL Server 的替代方案)能够说明一些问题什么对他们有用。

kak*_*kaz 1

我会写一个答案,但这实际上取决于您拥有的基础设施,或者您可以负担得起:

  1. 为什么将只读数据和事务数据保存在一个数据库中?也许只读数据应该位于单独的文件/数据库/磁盘/服务器集上。我不相信您一直在连续读取 500 GB 的数据文件。分离使您能够仅备份已更改的部分。它可以作为复制备份到单独的数据库服务器
  2. 您可以研究与数据增强协议相关的重复数据删除。这意味着备份期间的某些内容(软件代理)会比较更改的数据并仅移动更改的部分(如差异备份)。不同之处在于,在重复数据删除存储上,此类系统可以构建离线合成完整备份。即使需要 RDBMS 执行经典的完整备份,数据传输也只是不同。根据各种因素,您可能会获得更快的完整备份。
  3. 您可以研究来自不同供应商的快照技术。其中一些解决方案能够为各种数据库 RDBMS 执行一致的快照。它可能是经过充分认证的解决方案。