【问题标题】:Confirming data in a SQL Server 2008 mirror确认 SQL Server 2008 镜像中的数据
【发布时间】:2014-03-24 21:20:42
【问题描述】:

我有一个为镜像设置的 SQL Server 2008 数据库,我想知道是否有任何方法可以生成一份审计报告,表明数据已正确镜像,并且故障转移不会导致任何数据丢失。我可以使用数据库镜像监视器显示正在传输数据,但需要一种方法来验证数据是否匹配(最好不必破坏镜像)。

【问题讨论】:

  • 我很好奇。每个表中的简单count(*) 不能确认这一点吗?

标签: sql-server sql-server-2008 database-mirroring


【解决方案1】:

只要查询sys.database_mirroring,如果 mirroring_state_desc 是 'SYNCHRONIZED' 则数据在镜像中。确保事务安全('mirroring_safety_level')为 FULL 以保证故障转移时不会丢失数据,请参阅Mirroring states

如果事务安全设置为 FULL 自动故障转移,在 SYNCHRONIZED 状态下都支持手动故障转移,则故障转移后不会丢失数据。 如果关闭事务安全性,则始终可能会丢失一些数据,即使处于 SYNCHRONIZED 状态也是如此。

如果审核员不信任官方产品文档,您可以显示镜像的数据库快照的数据内容,因为无法访问镜像。见Database Snapshots。显然,要与冻结的快照进行有意义的比较,您必须先冻结源,在镜像上拍摄快照,运行比较,然后解冻源。这意味着数据库在持续时间内是只读的,任何更改都将导致它与快照不同并导致比较失败。一个徒劳的练习,有停机时间,因为文档明确指出同步的完全受保护的镜像保证与源相同。

【讨论】:

  • 我发现我可以从 sys.database_mirroring 或 sp_dbmmonitorresults 显示有关镜像状态的信息,但出于审计目的,他们希望得到某种报告,表明数据是“生产就绪”或证明它们是同步的。我查看了一些 redgate 和 idera 工具,它们表明它们可以执行数据比较,但不知道这两个选项是否需要我打破镜像来运行它们。
  • 除了在源头冻结活动之外,您也可以在那里拍摄快照。当然,让各个快照同步是一个时间问题(即,除非系统处于静止状态,否则它永远不会 100%),但你确实得到了一个不动的目标。
  • @BenThul 是的,这是一个聪明的主意 :)
  • 这是否需要我打破镜像以根据快照检查数据?
  • @user3457301:不。当您创建数据库快照时,您正在创建一个基于源数据库数据文件的“数据库”。更新源(即镜像流量)时确实会产生一些费用,但其他一切都会照常工作。
猜你喜欢
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多