我为数据库镜像配置了 SERVERA 和 SERVERB,A 作为主体,B 作为镜像。我为 SERVERA 创建了一个 CNAME 并在我的连接字符串中使用它。我没有使用连接字符串的 FailoverPartner 属性,部分原因是我怀疑我的某些应用程序不支持它,部分原因是我正在尝试了解 CNAME。
我对从 A 到 B 的故障转移的期望是:1. 连接会失败 2. 我需要更改 CNAME 以指向 SERVERB。3. 我必须在我的客户端上执行 ipconfig /flushdns。4. 那么一切都会好起来的。
相反,我不必做任何这些。我的应用程序自动开始转到 SERVERB,即使我的 CNAME 指向 SERVERA。我读过连接字符串将从 SQL 获取镜像实例,这将取代连接字符串的 FailoverPartner 属性(我猜是 CNAME),但这些都是关于何时使用 FailoverPartner 属性的帖子。同样,我的连接字符串没有使用该属性。
有人可以解释或指向一个资源,该资源指示即使连接字符串中使用的 CNAME 指向 SERVERA,我的应用程序如何知道到达 SERVERB 吗?
安装程序是 Windows 2008R2 / SQL 2008R2
这是设计使然。在您的客户端能够连接到主服务器但数据库已故障转移到辅助服务器的情况下,主服务器会将此通知客户端。因为服务器不知道您正在使用的 CNAME,所以它将使用它从镜像配置中获得的信息将客户端定向到数据库的当前位置。
您的 CNAME 发挥作用的情况是无法再联系主服务器。然后,客户端在尝试连接到连接字符串中配置的辅助服务器之前,需要在联系主服务器时超时。
MS 的以下页面描述了行为...... https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql/database-mirroring-in-sql-server