【问题标题】:How to connect to mirrored SQL Server after failover?故障转移后如何连接到镜像 SQL Server?
【发布时间】:2010-02-04 15:13:20
【问题描述】:

我设置了一个数据库镜像,然后用这个connectionstring连接到它:

    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 将为我完成这项工作。那我现在该怎么办?

【问题讨论】:

  • 您应该指定是否有见证人或者这是手动故障转移配置(如果您有见证人,您只会获得自动故障转移。请参阅technet.microsoft.com/en-us/library/ms189852(SQL.90).aspx)。您还应该检查 Principal 和 Failover 上的数据库状态。
  • @doug_w:我通过 T-SQL 手动检查,一切正常 :) @gbn:我正在使用 ADO.NET

标签: sql-server ado.net connection-string failover high-availability


【解决方案1】:

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

SqlConnection.ClearPool(conn);

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

感谢大家的支持。 :D

【讨论】:

  • 是的 - 连接池可能会导致集群和镜像发生这种类型的事情
  • 您如何确定何时清理池?如果打开引发异常,您是否正在尝试使用 try/catch 打开 conn 并执行此操作?或者你有没有发现任何特定的事件可以用来通知你何时可能需要清理池?此外,您可以在连接字符串中禁用池化,但这会影响性能,就像在打开连接之前始终清除池一样。
  • 很久以前,我没有代码了,但是如果我没记错的话,我会在 catch 异常中清除连接池。不是一个理想的解决方案,但它对我来说是一个演示。
  • 我们的组织也有类似的情况,尝试/捕获任何数据库尝试。 catch 将错误消息部分与存储在配置中的与故障转移情况相关的标准消息进行比较,例如上面的“传输级”错误,或有关在还原中连接到数据库的错误(在尝试连接到数据库时遇到)已故障转移,服务器重新联机)。我们还有一个配置标志来启用/禁用连接池清除。因此,我们在 DB 异常中查找这些特定错误,如果匹配,则清除池。
【解决方案2】:

我不是 .net 方面的专家,但您需要 SQL 本地客户端 (SQLNCLI) 来处理故障转移。 “ado.net”可能是 SQLOLEDB

至少在 Windows Server 2003 之前它默认不安装。它要么是独立的,要么是 SQL 客户端工具的一部分,所以我怀疑你使用的是 SQLOLEDB

【讨论】:

  • 你能告诉我更多细节吗? :)。
  • 试试 Provider=SQLNCLI;连接字符串。我现在无法访问 msdn 以查找参考
【解决方案3】:

关闭主体后,您是否验证故障转移确实成为主体?如果它在 Sql Server 上没有自动故障转移,那么你的镜像仍然是一个镜像。

【讨论】:

  • SQL Server 显示镜像已成为主体。我尝试了一个 T-SQL,它运行良好:-s
  • 好的,大约一年前刚刚开始使用故障转移,我知道错过这些小事情是多么容易……抱歉,没有答案。
【解决方案4】:

我们发现如果您没有设置足够大的超时设置,就会发生这种情况。

https://serverfault.com/questions/249589/db-auto-failover-in-c-does-not-work-when-the-principal-server-physically-goes-o

【讨论】:

    猜你喜欢
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2014-10-21
    • 2015-02-17
    相关资源
    最近更新 更多