我们的应用程序在分布式事务中写入多个 SQL Server 数据库。Ops 人员表示,这会打乱他们的灾难恢复计划,因为虽然实时表上的事务可能同时提交,但不同数据库上的日志传送时间略有不同。因此,在灾难恢复情况下,会有一些部分事务。
是否有方法在 DR 中维护独立但同步的数据库?还是我们必须重新设计为相对独立的数据库(或单个数据库)?
答案1
我不确定您的运营灾难恢复计划是什么,但您可以恢复到特定的事务,以确保所有数据库处于一致状态。为此,您将使用标记交易。
这种方法的一个限制是,您只能恢复到标记的事务,而不能恢复到特定的时间点。我不确定这是否会扰乱您的策略。
从上面的文章来看,基本方法是:
- 为每个相关数据库创建完整或差异数据库备份。
- 在所有数据库中标记一个事务块。
- 备份所有数据库的事务日志。
- 使用 NORECOVERY 恢复数据库备份。
- 使用 STOPATMARK 恢复日志。
请注意,在事务标记事务的两阶段提交期间,其他事务将被阻止,这会影响性能。
答案2
在我看来,使用标记事务是在单独的物理边界上(就您的数据库而言)维护逻辑应用程序完整性的最佳方式。
另一个选择是使用 SQL 镜像(http://technet.microsoft.com/en-gb/library/cc917680.aspx)。简而言之,这是一种确保事务在标记为完成之前在两个数据库(一个在主站点,一个在 DR 站点)上完成的方法。这显然会对性能产生影响,您需要确定这是否会对您的应用程序造成问题。