我正在处理一个非常大的数据库(250+GB),里面有超过 2.25 亿条记录。这个数据库太过庞大,很难操作。这个数据库是只读的。
我们正在考虑购买速度更快的硬件,但无论如何,我都在尝试找到使用数据库的最有效方法。此数据库必须每晚从主数据库更新,并且必须将停机时间保持在最低限度。主数据库由第三方维护。
我正在尝试寻找更新数据库的最佳方法,但运气不佳。我研究了差异备份和事务日志备份,但为了应用它们,必须先恢复完整备份。这完全违背了我使用差异备份的目的,因为我还不如在主数据库上进行完整备份,然后每晚简单地恢复完整备份,因为这比每晚恢复完整备份并应用差异备份要快。
我希望有一个解决方案,让我可以进行一次完整备份(或者可能每月一次),然后从那时起,只需基于原始完整备份应用某种类型的增量备份即可。这将使停机时间保持在最低限度,因为一旦完成第一次完整备份,我只会每晚应用增量备份。我只需在每次“增量”备份后重建索引即可。我还没有找到这样的解决方案。
我现在正在深入研究数据库备份和性能,并不断阅读 MSDN,但似乎这个解决方案不是一种选择。我想我会作为最后的手段来询问——肯定有一些人管理着大型数据库,每晚进行恢复是不切实际的。
有什么建议吗?我还欢迎有关性能的建议/页面链接,因为我从未使用过这么大的数据库。
答案1
您正在描述日志传送,但您想使用“差异”备份而不是日志备份,这就是您的方法的问题所在。使用日志传送,您可以恢复数据库一次,然后在主站点上创建日志备份时应用它们,并且您永远不必重新执行初始完整备份恢复。只需每隔几个小时继续应用传送的日志,您就可以获得只读副本。
答案2
也许这个第三方会建立某种复制每晚都移动更改?
答案3
如果您被允许访问包含生产数据库和主数据库以及只读数据库的环境,并且主数据库和只读数据库可以是运行 SQL2005 / SQL2008 Enterprise 版本的同一数据库实例,则您可以使用数据库快照。这将为您提供数据库的即时只读副本。
http://msdn.microsoft.com/en-us/library/ms175158.aspx
如果您无权访问生产环境,您可以询问他们是否愿意在您的环境中设置镜像数据库 - 这也允许您运行快照,但您需要企业版软件和许可证。
http://msdn.microsoft.com/en-us/library/ms175511.aspx
如果他们/您不使用企业版或者您需要近乎实时的数据,那么事务复制是另一种选择。
http://msdn.microsoft.com/en-us/library/ms151176.aspx
如果恢复时间过长,请考虑购买备份磁盘压缩软件 - 这通常会根据所保存的数据类型加快备份/恢复速度。
答案4
Remus 首先回答了这个问题,但日志传送场景的工作方式如下:
- 第三方于 1/1 向您发送数据库的完整备份
- 您在 norecovery 模式下以待机模式恢复数据库,这会将数据库设置为只读(仅对 dbos)
- 第三方在 1/2 向您发送事务日志备份(或多个),然后您将其应用到数据库,使更改保持最新。应用备份后,数据库将再次处于待机模式,只读
- 每天重复这个过程