7

我建立一个数据库镜像,然后使用该connectionstring连接到它:如何在故障转移后连接到镜像SQL Server?

Data Source={0};Failover Partner={1};Initial Catalog=AdventureWorks; 
    Integrated Security=True; 

添加一些数据到数据库中,我关闭主体服务器,所以镜像服务器成为主要服务器之后。我再次打开连接,出现此错误:

System.Data.SqlClient.SqlException: A transport-level error has 
occurred when sending the request to the server. (provider: Shared Memory 
Provider, error: 0 - No process is on the other end of the pipe.) 

我认为与故障转移合作伙伴连接字符串中指定,ADO.NET会做的工作对我来说。那么我现在该做什么?

这个问题很紧迫。非常感谢你的帮助。

+1

应指定是否有证人或如果这是一个手动故障转移配置(你只能得到,如果你有一个证人的自动故障转移。看到http://technet.microsoft.com/ EN-US /库/ ms189852(SQL.90)的.aspx)。您还应该检查Principal和Failover上的数据库状态。 – 2010-02-04 15:51:33

+0

你在使用什么提供商? – gbn 2010-02-04 15:55:55

+0

@doug_w:我通过T-SQL手工检查,一切正常:) @gbn:我正在使用ADO.NET – Vimvq1987 2010-02-04 15:58:42

回答

3

幸运的是,我解决了这个问题。我只需要调用ClearPool方法:

SqlConnection.ClearPool(conn); 

此方法将清除连接池。然后,问题消失了。我很高兴。

谢谢大家,支持你。 :D

+0

是的 - 连接池可以导致这种类型的事情与群集和镜像 – onupdatecascade 2010-02-04 19:48:36

+0

你如何确定何时清除池?你是否试图用try/catch打开conn,如果打开抛出异常呢?或者您是否发现了可能需要清除池的通知时可以挂钩的特定事件?此外,您可以在连接字符串中禁用连接池,但会影响性能,与在打开连接之前始终清除连接池相同。 – 2013-07-11 22:36:32

+0

这是很久以前,我没有代码了,但如果我没有记错的话,我清除连接池的捕获异常。不是一个理想的解决方案,但它适用于我作为演示。 – Vimvq1987 2013-07-26 05:46:31

2

我不是一个专家.net的东西,但你需要SQL本机客户端(SQLNCLI)来处理故障转移。 “ado.net”可能是SQLOLEDB

直到Windows Server 2003至少它没有默认安装。它可能是独立的或是SQL客户端工具的一部分,所以我怀疑你正在使用SQLOLEDB

+0

您能否给我更多的细节? :)。 – Vimvq1987 2010-02-04 16:18:14

+0

尝试提供程序= SQLNCLI; conn字符串。我现在无法进入msdn查找参考 – gbn 2010-02-04 16:21:42

0

关闭主体之后,你确认了故障切换实际上成了主体吗?如果它在Sql Server上没有自动故障转移,那么你的镜像仍然是一个镜像。

+0

SQL Server显示镜像已成为主体。我尝试了一个T-SQL,它运行良好:-s – Vimvq1987 2010-02-04 16:57:39

+0

好吧,仅仅从一年前的故障转移开始,我知道错过这些小东西是多么容易......没有答案给你,抱歉。 – taylonr 2010-02-04 16:59:51

相关问题