如何解决 SQL Server 2000 中的连接问题

如何解决 SQL Server 2000 中的连接问题

Chris Tull, Microsoft Help and Support

这一篇文章能帮助你解决微软 SQL 伺候器 2000 的连接性问题。这一篇文章包含你能拿帮助解决你的连接性问题的通常连接性问题和步骤的描述。

SQL Server的例证和客户端申请之间的沟通的 SQL Server 2000 支持一些方法。如果你的客户申请和SQL Server的例证在相同的计算机上住, Microsoft Windows 处理之间的沟通 (IPC) 成份像是当地的命名管或者被分享的记忆记录用来沟通。 然而, 当客户申请和SQL Server的例证在不同的计算机网络IPC像是TCP/IP上住的时候或者命名管道用来沟通。

SQL Sever 2000 使用网络控件库(一个DLL)与一个特别的网络记录沟通。 一双相配网络控件库一定在客户计算机和服务器计算机上是活跃的支援你想要使用的网络记录。 举例来说,如果你想要使一个客户申请能够与通过TCP/IP的一个 SQL Server的特定例证沟通, 客户TCP/IP套接字网络控件库 (Dbnetlib.dll) 一定配置成在客户计算机上对伺候器连接。 同样地, 服务器TCP/IP套接字网络控件库 (Ssnetlib.dll) 一定在伺候器计算机上听。 在这一个情节中, TCP/IP协议堆栈一定是装置在客户计算机和服务器计算机。

在你安装SQL Server 2000 之后,你能配置客户端网络的特性使用客户端网络公用程序的网络库属性。你能配置服务器网络的特性使用服务器网络公用程序(Svrnetcn.exe)的网络控件库属性。在安装 SQL Server 安装程序中的服务器工具期间,服务器的网络库也被同时安装了。然而,一些服务器的网络库可能不是激活的。如此,SQL Server 2000 启用并侦听 TCP/IP、命名管道和共享内存。因此,让一个客户端对一部服务器计算机连接,客户端一定使用一个客户端网络库,该网络库匹配与SQL Server实例正在使用的服务器网络库之一。

对于关于SQL Server通讯部件和网络库的其它信息,请参见“SQL Server 在线参考书中的下列主题:

    通信部件

    客户端和服务器网络库

    管理客户端

解决连接问题

SQL Server 2000 中大多数连接问题你可能会注意到的都是由 TCP/IP 的问题或 Windows 身份认证的问题引起,或者两者共同组合引起。

重要说明:你开始解决 SQL Server 2000 的连接问题之前,确定MSSQLServer 服务已在运行 SQL Server 的计算机上启动。

验证 DNS 设置

域名系统 (DNS)的名称解析过程被用于解决IPSQL Server实例名称。如果名称解析程序不正确地工作,SQL服务器的实例不是可到达的,你可能接受到一条或多条下列错误信息:

SQL Server does not exist or access denied

General Network Error

Cannot Generate SSPI Context

为了要确认名称解析程序是解析正确的服务器,你能使用服务器的服务器名字和IP地址ping服务器。为此,请遵从如下步骤操作:

1.  单击开始,然后单击运行

2.  运行对话框中,在打开框中键入 cmd,然后单击确定

3.  在命令提示符下,运行下列命令:

ping <Server Name>

记录返回的 IP 地址。

4.  在命令提示符下,运行下列命令(此处的 IP address 就是你在步骤 3 中记录的 IP 地址):

ping –a <IP address>

确认指令跟正确的服务器名字解决。如果任一指定指令不成功、超时或者没有返回正确的数值在两个指定的命令,那么DNS查找未能正常工作,或者因为其它的网络问题引发问题。要查看当前DNS设定,在命令提示符下运行下列命令:

ipconfig /all

要解决此问题,可以在客户端计算机上的 %systemroot%/system32/drivers/etc/hosts 文件中为服务器添加一个条目。要解决此问题,还可以使用命名管道网络库连接到服务器。

启用的协议和别名的验证

如果客户端计算机上的别名错误设置,可能会引起连接问题。你可以查看别名使用客户端网络实用程序。为此,请按以下步骤操作:

1.  启动客户端网络实用程序。如果 SQL Server 客户端工具被安装在正在运行客户端应用程序的计算机上,请启动客户端网络实用程序按照以下步骤:

a.        单击开始,然后指向程序

b.        指向“Microsoft SQL Server”,然后单击客户端网络实用程序

如果 SQL Server 客户端工具没有安装在客户端计算机上,请按照以下步骤启动客户端网络实用程序:

a.        单击开始,然后单击运行

b.        运行对话框中,在打开框中键入 cliconfg,然后单击确定

2.  “SQL Server 客户端网络实用程序窗口中,单击常规标签,然后启用你要使用的所有协议。

注意:你必须启用 TCP/IP 协议和命名管道协议至少。

3.  单击别名标签,然后验证为 SQL Server 实例所配置的别名。

4.  验证别名的属性,确认服务器名或 IP 地址和协议的配置是正确的。

你可以测试连接性能创建一个新的别名,通过使用服务器名、IP 地址或者其他协议。
   
注意:在 Microsoft 数据存取部件 (MDAC) 的早期版本中,客户端网络实用程序的用户界面是不同的。因此,如果你没有看到选项在本文中列出的,请在正在运行客户端应用程序的计算机上安装MDAC 的新版本。

验证 SQL Server 实例正在正确地侦听

要验证 SQL Server 实例正在正确地侦听命名管道、TCP/IP 或你在客户端应用程序中使用的其他协议,请打开当前的 SQL Server错误纪录文件SQL Server 错误日志文件可能包括与以下类似的条目:

2003-11-06 09:49:36.17 server SQL server listening on TCP, Shared Memory, Named Pipes. 2003-11-06 09:49:36.17 server SQL server listening on 192.168.1.5:1433, 127.0.0.1:1433.
   
通过分析 SQL Server 错误日志文件中的条目,可以验证 SQL Server 实例是否正在侦听正确的 IP 地址和端口。在默认情况下,一个 SQL Server 实例默认侦听端口 1433。你还可以验证 SQL Server 的协议设置并更改 SQL Server 中的属性使用服务器网络实用程序,包括可以连接到 SQL Server 和可以使用的端口的协议。关于使用服务器网络实用程序的更多信息,请参见 SQL Server 在线参考书中的“SQL Server 网络实用程序专题。
   
有时候,SQL Server 2000 可能不会绑定于端口 1433 或任何其他指定的端口。如果端口正被其他应用程序使用,或者如果你正在尝试使用一个错误的 IP 地址进行连接,就可能会出现此问题。因此,TCP/IP SQL Server 的连接可能不成功,在 SQL Server 错误日志中你会收到下列错误信息:

2001-11-14 15:49:14.12 server SuperSocket Info:Bind failed on TCP port 1433.
如果通过 TCP/IP 连接你不能连接到 SQL Server 实例,请尝试使用命名管道协议或共享内存协议。运行下面的命令在命令提示符下,以获取信息关于正在使用的端口:

NETSTAT -an
注意:对于 SQL Server 命名实例,SQL Server 动态地决定端口并侦听决定的端口。因此,当你启动 SQL Server 命名实例时,SQL Server 将设法侦听之前使用的端口。如果 SQL Server 不能绑定到该端口,命名实例可能会动态地绑定到另一个端口。在这种情况下,请确认客户端应用程序也被设置为动态地决定端口。作为选择,你还可以为命名实例指定一个静态端口,通过客户端网络实用程序对其进行绑定和侦听。

解决 MDAC 问题

MDAC 的问题也可能会引起连接问题。例如,安装一个软件可能会覆盖一些 MDAC 文件或更改权限,而你需要这些权限才能访问 MDAC 文件。你可以运行 MDAC 部件检查器来验证 MDAC 在计算机上的安装。
注意:如果你正连接到 SQL Server 的一个命名实例,请确认计算机上运行的是 MDAC 2.6 或更新的版本。MDAC 的早期版本不识别 SQL Server 的命名实例。因此,可能无法连接到命名实例。
你可以使用 Odbcping.exe 实用程序来验证通过 SQL Server ODBC 驱动程序的连接。

解决防火墙问题

如果防火墙存在于客户端计算机和正在运行 SQL Server 的计算机之间,请确认通过防火墙进行通信时所需的端口已打开。
如果你使用 TCP/IP 协议连接 SQL Server 实例,请确认能够用 Telnet 程序连接到 SQL Server 正在侦听的端口。要使用 Telnet 程序,在命令提示符下运行下列命令:

Telnet <IP Address> <Port Number>

如果 Telnet 程序没有成功,并且你接收到错误信息,请解决此错误然后尝试再次连接。
注意:因为由 Slammer 病毒引起的问题,在你的防火墙上,用户数据报协议 (UDP) 端口 1434 可能被阻挡。

解决身份验证和安全问题

由于身份认证失败,可能无法连接到 SQL Server。如果身份认证失败,你可能收到下列错误信息之一:

Login failed for user '<username>'

Login failed for user 'NTAUTHORITY/ANONYMOUS LOGON'

Login failed for user 'null'

如果你接受一个错误信息因为身份认证失败和错误信息不提到一个特定的SQL Server 登录名,请使用 Windows 身份认证解决该问题。由于 Windows 身份认证的问题,你可能会收到下列错误信息:

Cannot generate SSPI Context

下列问题可能会引起身份认证和安全问题:

    NTLM 身份认证或 Kerberos 身份认证出现问题。

    由于连接问题,无法联系域控制器。

    域之间的信任关系出现问题。

有关可能原因的更多信息,请参见计算机上的事件日志。要解决 Windows 身份认证的连接问题,你可以使用 SQL Server 身份认证连接到 SQL Server 实例。 有关如何诊断和解决“Cannot Generate SSPI Context”

如果在使用 SQL Server 身份认证时连接没有成功,你会收到下列错误信息:

Login failed for user '<username>' .Not associated with a trusted connection
若要解决此问题,请按照以下步骤操作。
警告:不恰当的使用注册表编辑器可能导致严重问题,可能需要重新安装操作系统。Microsoft 不能保证你可以解决因注册表编辑器使用不当而导致的问题。使用注册表编辑器的风险需要你承担。

1.  请确认 SQL Server 实例配置为使用 Windows 身份认证和 SQL Server 身份认证。为此,请确认在正在运行 SQL Server 的计算机上存在下列注册表项。对于默认的 SQL Server 实例:

HKEY_LOCAL_MACHINE/Software/Microsoft/MSSQLServer/MSSQLServer/LoginMode

对于 SQL Server 的命名实例:

HKEY_LOCAL_MACHINE/Software/Microsoft/Microsoft SQL Server/<Instance Name>/MSSQLServer/LoginMode

请确认已设置下列注册表项的值:

身份认证类型 

仅限于 Windows 身份认证 1

混合模式(SQL Server 身份认证和 Windows 身份认证)    2

 

注意:如果你对注册表进行了任何更改,必须关闭并重新启动 SQL Server 实例使更改生效。

2.  尝试使用其他 Windows 帐户或 SQL Server 登录帐户连接到 SQL Server 实例。这样能够帮助确定是否是由于某个特殊的登录帐户的问题而造成连接失败。例如,登录帐户的密码可能已被更改。

3.  尝试使用其他协议连接到 SQL Server 实例。例如,使用 TCP/IP 协议进行 Windows 身份认证的连接可能会失败,但是使用命名管道协议进行 Windows 身份认证的连接就可能会成功。

如果你正在使用证书,当尝试连接到 SQL Server 实例时,可能会收到一条安全错误信息关于安全套接字层 (SSL)的。

解决 TCP/IP 套接字上的压力问题

当你为 SQL Server 使用 ODBC 驱动程序、Microsoft OLE DB Provider for SQL Server System.Data.SqlClient 管理提供程序时,可以使用恰当的应用程序设计界面 (API) 来禁用连接。在禁用连接、并且应用程序时常打开和关闭连接时,压力在对基本 SQL Server 网络库可能会增加。有时,Web 服务器和 JDBC 驱动程序也会尝试连接到 SQL Server 实例。因此,对 SQL Server 连接需求的增加可能会超过 SQL Server 的处理能力。这可能会给 TCP/IP 套接字带来压力,你还可能在 SQL Server 错误记录文件中收到下列错误信息:

2003-08-07 20:46:21.11 server Error:17832, Severity:20, State:6
2003-08-07 20:46:21.11 server Connection opened but invalid login packet(s) sent.Connection closed.
注意:如果运行 SQL Server 2000 SP3 SQL Server 2000 SP3a,则不会注意到对 TCP/IP 套接字的压力,这是由于添加了对登陆数据包数量的限制。在使用第三方驱动程序连接到 SQL Server 实例时,发生错误 17832。要解决该问题,请与第三方供应商联系,并获取经测试证明能够用于 SQL Server 2000 SP3 SQL Server 2000 SP3a 的驱动程序。

查看 SQL Server 实例是否以单用户模式启动

如果尝试连接的 SQL Server 实例是以单用户模式启动的,只能建立一个到 SQL Server 的连接。如果运行软件的计算机自动连接到 SQL Server,该软件可以轻松地使用唯一的连接。例如,下面的软件可以自动连接到 SQL Server 实例:

    SQL Server 代理程序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值