2

我有一个连接到 SQL Server 的 VB.NET 应用程序。

我们最近添加了数据库镜像以防服务器故障。

当然,我们的 SQL Server 失败了,但 VB.NET 应用程序没有进行故障转移。

我发现在我们的代码中,连接字符串中没有指定故障转移伙伴,所以我更新了连接字符串,如下所示:

sConnectionString = "Data Source=PROD-SQL;Failover Partner=FAILOVER-SQL;Initial Catalog=DB;User ID=****;Password=******;"

SqlClient.SqlConnection对象接受此连接字符串,但是当我调用它的.Open()命令时,它失败并出现以下错误:

"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)"

为什么是这样?我们的 Intranet 应用程序故障恢复得很好(使用 DSN-less 连接的经典 ASP)。

应用程序是否必须至少与主服务器建立一次成功的初始连接才能成功进行故障转移?

谢谢!

4

1 回答 1

0

在您的主体数据库上运行它

SELECT DB_NAME(database_id) AS 'DatabaseName'
, mirroring_role_desc 
, mirroring_safety_level_desc 
, mirroring_state_desc 
, mirroring_partner_instance
FROM
sys.database_mirroring WHERE mirroring_guid IS NOT NULL; 

mirroring_partner_instance 中返回的值是连接将用于故障转移的服务器名称,而不是 FAILOVER-SQL。FAILOVER-SQL 将在它第一次尝试获取连接但无法联系 PROD-SQL 时使用。如果 PROD-SQL 可用,则故障转移伙伴将从 sql 服务器值 mirroring_partner_instance 设置在缓存中。

有关更多信息,请参见此处:http: //blogs.msdn.com/b/spike/archive/2010/12/15/running-a-database-mirror-setup-with-the-sqlbrowser-service-off-may-产生意外的结果.aspx

于 2014-01-18T06:14:46.150 回答