场景:我们想在 Active Directory 域环境中使用 SQL Server 2005 Standard 版本的数据库镜像以及见证服务器。数据库由第三方应用服务器提供,除了数据库连接字符串外,无法对其进行修改。
与此相关的两个问题:
- 我们如何才能以尽可能少的钱让第三方应用服务器无法发现故障(或者至少减少手动操作)?我的想法是设置指向主服务器的 DNS“sqlserver.ourdomain”,并在连接字符串中使用它。然后,如果发生故障,我们将 DNS 更改为指向镜像服务器并重新启动应用服务器。虽然不是隐形或自动的,但成本低廉,而且似乎应该可以工作。
- 故障发生后,我们如何将事务从辅助服务器推送回主服务器并重新升级主服务器?此过程必须考虑在 #1 中“撤消”故障转移模式。显然,如果我们使用上面的 DNS 选项,我们会将 DNS 重新指向主服务器,但我如何让系统恢复到以前的样子——主服务器从镜像中保持最新状态,镜像服务器降级回镜像服务器?
答案1
问题 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
如果您不使用自动故障转移,那么它仍然非常简单:只需右键单击数据库,进入数据库镜像,您就可以将数据库从主数据库切换到辅助数据库,反之亦然。它们会在重启等中断后自动恢复同步。
答案2
还有一件事要记住(与您的问题无关,但有时人们不会想到) - 如果原始主体将关闭一段时间,则应删除镜像以防止新主体上的事务日志失控。否则,必须保留所有事务日志,因为镜像假定旧主体会在某个时间点重新上线。
谢谢