【问题标题】:connection string to a SQL Server cluster到 SQL Server 群集的连接字符串
【发布时间】:2010-10-19 14:15:41
【问题描述】:

谁能指出或告诉我如何将连接字符串写入 SQL Server 集群实例?

我想与 SQL Server 集群的特定实例的数据库(初始目录)建立可信连接。我找了很长一段时间,但找不到谷歌的官方答案。

我要求 C# ADO.Net 代码的连接字符串。

我知道如何将连接字符串写入普通的单机非集群 SQL Server 实例。

【问题讨论】:

    标签: c# sql-server ado.net cluster-computing


    【解决方案1】:

    服务器名称是虚拟服务器名称。

    例子:

    • 你有物理pserver1pserver2
    • 这些一起组成集群cserver -这托管虚拟服务器vserv1(也许,见下文)vserv2

    所以,它是vserv1\instancenamevserv1。您不使用物理服务器名称

    根据虚拟服务器可能名称的数量进行编辑:

    集群可能是主动/被动/A/P)或主动/主动(A/A)

    • 在 A/P 中,仅托管一个虚拟服务器,备用节点未主动使用。
    • 在 A/A 中,有 2 个虚拟服务器,通常每个节点托管一个。每个节点都为另一个节点备用。

    【讨论】:

    • 困惑——“托管虚拟服务器 vserv1(可能还有)vserv2”,您的意思是集群有两个虚拟服务器名称,vserv1 和 vserv2?还是打错字了?
    • SQL集群非默认实例的连接字符串格式是什么?
    • vserv1\instancename(或在 A/A 场景中的 vserv2\instancename
    【解决方案2】:

    连接字符串以通常的方式编写;但是在集群中,您有 3 个(或更多)地址:一个用于构成集群的每个节点,一个用于集群。 例如:我们有两个节点,地址分别为 192.168.0.10 和 192.168.0.20:如果您在连接字符串中写下其中一个数字作为 DataSource,您将获得对该物理实例的访问权限。但是,如果您想访问集群(虚拟)Sql Server 实例,则必须使用集群的地址(例如:192.168.0.230)作为数据源。 当然,您也可以使用机器名称代替 IP 地址,前提是您与集群在同一个域中。

    【讨论】:

    • 使用机器名不取决于是否在同一个域中,只取决于在 DNS 中公开的名称。并且有一个合理的 DNS 配置:这在某些组织中可能是一个问题 :-(.
    • 你是对的;我专注于连接字符串,错过了这一点,抱歉。
    • @Turro, 1. SQL集群非默认实例的连接字符串格式是什么? 2. 对于SQL集群,我们是否允许通过机器名连接来访问单个机器而不是虚拟服务器名?这种访问是否会破坏两个虚拟节点之间的数据镜像?
    • @Richard,你是什么意思?
    • @George2: 1) 连接字符串始终相同,您只需在DataSource=xxx 中指定您要访问的实例的名称;例如:Password=pwd;Persist Security Info=True;User ID=userid;Initial Catalog=dbname;Data Source=THENAMEORTHEIPADDRESSOFTHEINSTANCE;
    【解决方案3】:

    这在我能找到的任何地方都没有记录,但我必须使用集群上可用性组侦听器的名称。例如:

    data-source=tcp:AG1-Listener
    

    从字面上看,这在任何地方都没有记录。我很幸运,在某处的博客上找到了一个集群的连接字符串,并从那里找到了它。

    【讨论】:

    【解决方案4】:

    我知道这是一个旧线程但是:

    https://support.microsoft.com/en-us/kb/273673

    解释为什么应该在连接上指定超时。摘录如下。

    如果集群管理员对 SQL Server 服务器进行故障转移,则不会发送 TCP 重置数据包。如果 SQL Server 进程被操作系统(通过 Kill.exe)终止,则发送重置数据包。

    如果应用程序未指定查询超时参数或查询超时为零 (0),这可能会影响客户端应用程序。

    如果应用程序没有查询超时值,则在发生故障转移后打开的连接将保持在 ESTABLISHED 状态。打开的连接没有关闭并且没有从这些连接发送更多 TCP 数据包的事实表明这些连接完全空闲。由于故障转移没有向客户端应用程序发送任何 TCP 重置数据包,因此这些打开的连接会无限期地等待查询结果(假设无限期查询超时),并可能导致连接停止响应(挂起)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      相关资源
      最近更新 更多