VB.NET应用程序不使用故障转移伙伴

时间:2012-08-03 13:42:20

标签: vb.net sql-server-2008 sql-server-2008-r2 mirroring database-mirroring

我有一个连接到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连接的经典ASP)。

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

谢谢!

1 个答案:

答案 0 :(得分: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。首次尝试获取连接但无法联系PROD-SQL时将使用FAILOVER-SQL。如果PROD-SQL可用,则故障转移伙伴将从sql server value mirroring_partner_instance设置在缓存中。

有关详细信息,请参阅此处:http://blogs.msdn.com/b/spike/archive/2010/12/15/running-a-database-mirror-setup-with-the-sqlbrowser-service-off-may-produce-unexpected-results.aspx