SQL 虚拟服务器的客户端连接的说明

Extended support for SQL Server 2005 ended on April 12, 2016

If you are still running SQL Server 2005, you will no longer receive security updates and technical support. We recommend upgrading to SQL Server 2014 and Azure SQL Database to achieve breakthrough performance, maintain security and compliance, and optimize your data platform infrastructure. Learn more about the options for upgrading from SQL Server 2005 to a supported version here.

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 273673
概要
本文概述了一些基本有关 Microsoft SQL 虚拟服务器客户端连接。
更多信息
重要此分区、 方法,或任务包含告诉您如何修改注册表的步骤。但是,如果注册表修改不当可能会出现严重问题。因此,请确保您仔细按照这些步骤。附加的保护注册表之前先备份您对其进行修改。然后,您可以在出现问题时还原注册表。有关如何备份和还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756如何备份和还原在 Windows 注册表


SQL 虚拟服务器的客户端行为

Microsoft 群集服务器 (MSCS) 提供了一个可靠的可靠平台,您可以在其构建关键 SQL Server 应用程序。您不必修改使用 MSCS 使用它们的大多数服务器应用程序。但是,基于事务的应用程序 (例如对于数据库服务器,such as Microsoft SQL Server),因此如果将失败服务器故障转移支持正确可防止丢失的事务完整性通常需要进行其他修改。开发客户端应用程序使用 MSCS 操作是相对来说简单一些。您必须在设计应用程序与数据库恢复和错误检查记住。

即使不使用的一个 SQL Server 的群集服务器自动恢复所有数据库,当重新启动服务器。若要确保数据库一致的应用程序状态使用数据库事务中恢复,以便正确地和一致的状态,在数据库中发生故障转移。发生故障转移时未完成的任何交易记录应该回滚时应保留的所有已提交的事务的效果。

在故障转移,客户端应用程序丢失 SQL Server 服务器的连接,并且必须重新连接到继续进行处理。 如果客户端连接到服务器是无状态,(例如对于通过使用 Microsoft Internet 信息服务器 [IIS] 开发的应用程序是无状态) 在客户端重新连接到服务器并继续处理。除非在客户端和服务器具有一种常见的状态 (例如对于打开的游标、 会话变量、 TRANSACT-SQL 的全局变量或在 tempdb 中的数据),故障转移不是对客户端是透明的。在这种情况下,您应该设计客户端应用程序通知用户该连接的任一丢失,或重置或使应用程序会自动重新建立到服务器的连接。 尚未提交发生故障切换时任何事务将回滚。

客户端如何处理服务器发生故障的讨论,是用于任何 SQL Server 客户端应用甚至不使用群集和虚拟服务器的标准。错误检查过程是为对于群集的客户端数据库应用程序非常相似。当群集开始故障转移时,客户端程序将接收数据库连接上的一条错误消息。遇到的错误消息取决于客户端程序正试图在该时间执行该操作。

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

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

如果应用程序不具有查询超时值,然后打开连接将保留在 ESTABLISHED 状态后发生故障转移。 这一事实不关闭打开的连接,并且没有进一步的 TCP 数据包将发送这些连接从表示这些连接都是完全空闲。因为在故障转移没有发送任何 TCP 重置为客户端应用程序的数据包,这些打开的连接对查询结果无限等待 (假定一个无限长的查询超时值),并且可能导致连接停止响应 (挂起)。

若要解决此问题,从客户端应用程序的角度来看,更改为有限数量的查询超时值。

虚拟数据库故障行为

时将失败虚拟数据库服务器等待客户端返回一条链接连接的失败的错误消息。在出现故障的节点的群集上数据库关闭,每个参数中设置了在同一节点上重新启动:

Start\Programs\Administrative Tools (Common)\Cluster Administrator\Group\Failover\Properties				
默认的组故障转移阈值是在 6 小时内之前剩余的节点发生故障转移的 10 个重新启动。然而,在 SQL Server 重新启动这可以通过 SQL Server 属性 SQL Server 群集资源上验证、 对该 SQL Server 900 以秒为单位) 的三个重新启动的默认阈值和默认情况下不会影响组的阈值。如果客户端连接到该服务器正在恢复数据库客户端接收等待数据库恢复的错误消息,并应在一次短暂停顿后重试。

SQL Server 6.5 和 7.0 SQL Server 考虑事项

SQL Server 6.5 和 7.0 SQL Server 恰好在上一个"虚拟数据库故障行为"一节所述的行为。

作为虚拟服务器运行 SQL Server 7.0 时 SQL Server 7.0 支持只有一个 IP 地址,但可能在其他端口上侦听,按客户配置。在下面的 Microsoft 知识库文章中"多侦听 TCP/IP 端口"主题所述:
254321INF: 群集的 SQL Server 要、 错误和基本的警告

Microsoft SQL Server 2000 注意事项

SQL Server 2000 具有一些行为差异的 SQL Server 6.5 和 7.0 SQL Server 版本中。

SQL Server 2000 端口使用

默认状态下,命名的实例侦听动态端口。 第一次服务器启动与端口设置为零 (0) 服务器将从操作系统请求一个可用的端口号,然后服务器在该端口上侦听。服务器记录此注册表,然后每次使用同一端口。

如果将服务器配置为侦听动态端口,并且该服务器无法在启动时动态的端口上侦听该服务器将选择另一个端口。

如果您配置一个静态端口在安装过程中或在安装后通过使用服务器网络实用程序它无法侦听 TCP/IP,如果此端口正在使用中。

客户端会检测到连接到命名的实例或具有一个非默认端口号的情况下该端口号。

连接信息写入到"LastConnect"缓存此注册表项中:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\supersocketnetlib\lastConnect
对于每个服务器和用于连接到这些在注册表中的方法,您将找到的条目。

客户端将尝试重新使用连接信息在每次连接,除非它出现故障,然后 re-negotiates 新的信息。如果由于某人更改其更改了端口号,或者如果它已被重新分配由于到端口正在使用中的动态端口,则可能发生这种情况。

已中断的连接

有三种方法可以断开连接:
  1. 服务器发生故障 ; 在进程终止由 killed (系统终止服务器进程 ID [spid]) 或访问冲突 (AV) 或其他内容将使操作系统或所需的服务失败。
  2. 计算机硬件故障或断电。
  3. 关闭服务器。
每个这些已中断的连接会表现出不同的行为在客户端计算机上检测到。
  1. 在服务器发生故障时的该情况下客户端立即收到一条连接断开的错误消息。您可以通过使用 OSQL,运行很长的查询连接来模拟这种行为,然后使用 KILL 终止您 SQL Server 进程。客户端退出与 ODBC 错误消息。
  2. 机器故障会更复杂。该行为可以更改细微的方式检测到失去连接。

    如果客户端读取信息的中间,因为数据会停止运行,可以立即检测连接丢失。

    如果客户端只需等待结果,则行为是稍有不同。行为取决于维持连线客户端计算机的配置。

    在 Microsoft Windows 2000 保留轮询是由客户端代码在每连接基础上设置的。默认状态下,维持连线设置为 30 秒。这意味着在 30 秒和客户端检测到套接字失去它如果收到一条错误消息。在 Microsoft Windows NT 4.0,维持连线不能设置在每连接基础上。保留 Alive 必须为这样会影响服务器上的所有应用程序在整个计算机设置。

    注册表项所引用的是:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters KeepAliveTime\REG_DWORD 30000

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters KeepAliveInterval\REG_DWORD 1000
  3. 您在初始化服务器关闭时,服务器在等待完成客户端的一段。但是,如果客户端仍在运行该服务器删除服务器内的线程。中止线程也可能会导致不同的错误消息客户端上。错误消息可以包含一个连接中断错误 ; 但是,大多数情况下您看到此错误消息:
    "出现未知的错误,连接可能已由服务器终止"。
    ODBC 本机错误代码被设置为零 (0),在这种情况下,但作为一条错误消息返回给客户端。
参考
有关在 SQL Server 2005 中的 SQL 虚拟服务器的客户端行为的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:

属性

文章 ID:273673 - 上次审阅时间:12/04/2007 03:44:52 - 修订版本: 7.3

Microsoft SQL Server 6.5 Enterprise Edition, Microsoft SQL Server 7.0 Enterprise Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL 2005 Server Enterprise, Microsoft SQL Server 2005 Standard Edition

  • kbmt kbhowto kbsql2005cluster kbclientserver kbinfo KB273673 KbMtzh
反馈