SQL Server故障转移:直到重新启动后才找到网络路径
本文关键字:网络 路径 重新启动 SQL 故障 转移 Server | 更新日期: 2023-09-27 18:17:56
我在我们的环境中面临一个问题,在故障转移配置中有2个SQL服务器。因此,如果其中一个不可用,另一个就会接替。
现在这些服务器不时地切换角色,因此一个服务器从主服务器切换到从服务器,然后返回。
每当这种情况发生时,我们就会得到一些SQL错误,现在我的印象是。net框架应该能够处理这种情况,然而它不是,但现在如果我们能从中恢复,那就不那么重要了。
但是似乎我们现在有一个情况,当他们做了切换,我们的WebAPI应用程序只是拒绝恢复,它一直给出错误。
然而,如果我们重新启动应用程序池,事情似乎又恢复正常了。
每个SqlConnection对象在使用后总是被处置,并且它们是用提供故障转移合作伙伴的连接字符串创建的:
Data Source=Server_1.Domain; Initial Catalog=database_name;User ID=db_user;Password=user_pass;Failover Partner=Server_2.Domain
如果需要的话,服务器和应用程序位于不同的域中。
现在,如果这种情况只是在他们互换角色时持续下去,那就好了,但我不太明白为什么它会持续下去。
我可以在StackOverflow上找到无数关于这个问题的线程,但他们似乎都有一个一致的状态,这不是那么一致的问题。
所以所有通常的"允许远程连接",启用"TCP/IP",开放端口等都应该是有序的,否则我们应该根本无法连接。
我也有点困惑,看到一个"命名管道提供程序,错误:40",不应该使用TCP/IP时,它不是同一台机器?有限责任…
这里有更多的错误细节。
[Win32Exception (0x80004005): The network path was not found]
[SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)]
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +642
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +116
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +1079
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +6600667
System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +233
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +278
System.Data.SqlClient.SqlConnection.Open() +239
我希望有人以前可能见过这样的东西,可以提供一个或两个提示?
我们从来没有真正破解过这个。即使有SQL Server顾问也不行。相反,他给我们指出了一个不同的方向,那就是可用性组。
因为我们不能马上做到这一点,现在我们使用SQL服务器的DNS别名,如果主服务器宕机,我们切换别名指向另一个。这不是自动的,但至少在切换DNS的情况下不会发生上述错误。