场景:我们希望在 Active Directory 域环境中使用 SQL Server 2005 Standard 版本的数据库镜像和见证服务器。数据库来自第 3 方应用服务器,除了 DB 连接字符串外,该服务器无法修改。
与此相关的两个问题:
- 我们如何才能让我们的 3rd 方应用服务器花费尽可能少的钱使故障在某种程度上不可见(或者至少需要更少的手动工作)?我的想法是设置指向主服务器的 DNS“sqlserver.ourdomain”并在连接字符串中使用它。如果它失败了,我们将 DNS 更改为指向镜像并重新启动应用服务器。不是隐形的或自动的,但很便宜,似乎应该可以工作。
- 我们如何在失败后将事务从辅助节点推回主节点并重新提升主节点?此过程必须考虑“撤消”#1 中的故障转移模式。显然,如果我们使用上面的 DNS 选项,我们会将 DNS 重新指向主服务器,但我如何让系统像以前一样恢复 - 主服务器从镜像中更新,而镜像降级回镜像?
问题1:你想多了。SQL 2005 的数据库镜像规范内置于连接字符串中。您在连接字符串中同时指定主服务器和镜像,驱动程序会按顺序尝试这些服务器。这是数据库镜像的优点之一 - 不需要更改客户端应用程序。
更多信息在这里:http: //msdn.microsoft.com/en-us/library/5h52hef8.aspx http://msdn.microsoft.com/en-us/library/ms366348.aspx
问题 2:您说您使用的是见证服务器,所以我假设您使用的是自动故障转移。SQL 2005 的数据库镜像会自动完成这些工作 - 更多信息在这里:
http://msdn.microsoft.com/en-us/library/ms189590.aspx
如果您不使用自动故障转移,那么它仍然很容易:您只需右键单击数据库,进入数据库镜像,您可以在主数据库和辅助数据库之间来回失败,反之亦然。在重启等中断后,它们会自动恢复同步。
要记住的另一件事(与您的问题无关,但有时人们不会考虑) - 如果原始主体将关闭一段时间,您应该删除镜像以防止新主体上的事务日志成长失控。否则,必须保留所有事务日志,因为镜像假定旧主体将在某个时候重新联机。
谢谢