SQLServer 连接失败错误故障的分析与排除

一般而言,有两种连接sql server 的方式,一是利用 sql server 自带的客户端工具,如企业管理器、查询分析器、事务探查器等;二是利用用户自己开发的客户端程序,如ASP 脚本、VB程序等,客户端程序中又是利用 ODBC 或者OLE DB等连接 sql server。下面,我们将就这两种连接方式,具体谈谈如何来解决连接失败的问题。

  一、"sql server 不存在或访问被拒绝"




(WINDOWS平台上强大的数据库平台)连接失败错误故障的分析与排除(图一)" width="408" height="139" />
(图1)


  "sql server 不存在或访问被拒绝"错误,通常是最容易发生的,因为错误发生的原因比较多,所以需要检查的方面也比较多。

  一般说来,有以下几种可能性:

  1、网络连接问题;

  2、sql server服务器问题;

  3、服务器端网络配置问题;

  4、客户端网络配置问题。

  首先,我们检查网络连接:

  1、ping服务器IP地址。首先先关闭服务器和客户端的防火墙,这是为了排除防火墙软件可能会屏蔽对 ping,telnet 等的响应。然后开始ping服务器IP地址,如果 ping服务器IP地址不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡,HUB,路由器等。

  2、ping服务器名称。如果失败则说明名字解析有问题,这时候要检查Netbuis协议是否安装、;DNS 服务是否正常。
其次,使用 telnet 命令检查sql server服务器工作状态。如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明 sql server 服务器工作正常,并且正在监听1433端口的 TCP/IP 连接;如果命令返回"无法打开连接"的错误信息,则说明服务器没有启动 sql server 服务,也可能服务器端没启用 TCP/IP 协议,或者服务器没有在 sql server 默认的端口1433上监听。

  最后,我们要检查服务器、客户端网络配置。服务器检查是否启用了命名管道;是否启用了 TCP/IP 协议等等。我们可以利用 sql server 自带的服务器网络使用工具来进行检查。

  单击:程序-> Microsoft sql server 服务器网络使用工具;打开该工具后,在"常规"中可以看到服务器启用了哪些协议,默认我们启用命名管道以及 TCP/IP 协议。点中 TCP/IP 协议,选择"属性",我们可以来检查 SQK Server 服务默认端口的设置。一般而言,我们使用 sql server 默认的1433端口。如果选中"隐藏服务器",则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接。




(WINDOWS平台上强大的数据库平台)连接失败错误故障的分析与排除(图二)" width="500" height="324" />
(图2)
(WINDOWS平台上强大的数据库平台)连接失败错误故障的分析与排除(图三)" width="441" height="192" />
(图3)


  接下来我们要到客户端检查客户端的网络配置。我们同样可以利用 sql server 自带的客户端网络使用工具来进行检查,所不同的是这次是在客户端来运行这个工具。单击:程序-> Microsoft sql server 客户端网络使用工具打开该工具后,在"常规"项中,可以看到客户端启用了哪些协议。同样,我们需要启用命名管道以及 TCP/IP 协议。点击 TCP/IP 协议,选择"属性",可以检查客户端默认连接端口的设置,该端口必须与服务器一致。




(WINDOWS平台上强大的数据库平台)连接失败错误故障的分析与排除(图四)" width="480" height="340" />
(图4)


  通过以上几个方面的检查,基本上可以排除第一种错误。

  二、"无法连接到服务器,用户xxx登陆失败"




(WINDOWS平台上强大的数据库平台)连接失败错误故障的分析与排除(图五)" width="408" height="126" />
(图5)


  该错误产生的原因是由于sql server使用了"仅 Windows"的身份验证方式,因此用户无法使用sql server的登录帐户(如 sa )进行连接。解决方法如下所示:

  1、在服务器端使用企业管理器,并且选择"使用 Windows 身份验证"连接上 sql server;

  2、展开"sql server组",鼠标右键点击sql server服务器的名称,选择"属性",再选择"安全性"选项卡;

  3、在"身份验证"下,选择"sql server和 Windows ";

  4、重新启动sql server服务。

  在以上解决方法中,如果在第1步中使用"使用 Windows 身份验证"连接 sql server 失败,那就通过修改注册表来解决此问题:

  1、点击"开始" "运行",输入regedit,回车进入注册表编辑器;

  2、依次展开注册表项,浏览到以下注册表:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\mssqlServer\mssqlServer];

  3、在屏幕右方找到名称"LoginMode",双击编辑双字节值;

  4、将原值从1改为2,点击"确定";

  5、关闭注册表编辑器;

  6、重新启动sql server服务。

  此时,用户可以成功地使用sa在企业管理器中新建sql server注册,但是仍然无法使用Windows身份验证模式来连接sql server。这是因为在 sql server 中有两个缺省的登陆户:




BUILTIN\Administrators
<机器名>\Administrator 被删除。

  要恢复这两个帐户,可以使用以下的方法:

  1、打开企业管理器,展开服务器组,然后展开服务器;

  2、展开"安全性",右击"登录",然后单击"新建登录";

  3、在"名称"框中,输入 BUILTIN\Administrators;

  4、在"服务器角色"选项卡中,选择"System Administrators" ;

  5、点击"确定"退出;

  6、使用同样方法添加 <机器名>\Administrator 登录。

  说明:

  以下注册表键:

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\mssqlServer\mssqlServer\LoginMode的值决定了sql server将采取何种身份验证模式。

  1、表示使用"Windows 身份验证"模式;

  2、表示使用混合模式(Windows 身份验证和 sql server 身份验证)。

  三、提示连接超时




(WINDOWS平台上强大的数据库平台)连接失败错误故障的分析与排除(图六)" width="408" height="126" />
(图6)


  如果遇到第三个错误,一般而言表示客户端已经找到了这台服务器,并且可以进行连接,不过是由于连接的时间大于允许的时间而导致出错。这种情况比较少见,一般发生在当用户在Internet上运行企业管理器来注册另外一台同样在Internet上的服务器,并且是慢速连接时,有可能会导致以上的超时错误。有些情况下,由于局域网的网络问题,也会导致这样的错误。

  要解决这样的错误,可以修改客户端的连接超时设置。默认情况下,通过企业管理器注册另外一台sql server的超时设置是 4 秒,而查询分析器是 15 秒。

  具体步骤为:

  企业管理器中的设置:

  1、在企业管理器中,选择菜单上的"工具",再选择"选项";

  2、在弹出的"sql server企业管理器属性"窗口中,点击"高级"选项卡;

  3、在"连接设置"下的"登录超时(秒)"右边的框中输入一个比较大的数字,如 30。

  查询分析器中的设置:

  单击“工具”->"选项"->"连接"; 将登录超时设置为一个较大的数字,连接超时改为0。

  四、应用程序连接失败

  以上的三种错误信息都是发生在 sql server 自带的客户端工具中,在应用程序中我们也会遇到类似的错误信息,例如:




Microsoft OLE DB Provider for sql server (0x80004005)
[DBNETLIB][ConnectionOpen (Connect()).]Specified sql server not found.
Microsoft OLE DB Provider for sql server (0x80004005)

  用户 'sa' 登录失败。原因: 未与信任 sql server 连接相关联。




Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'.
[Microsoft][ODBC sql server Driver]超时已过期.

  如果遇到连接超时的错误,我们可以在程序中修改 Connection 对象的超时设置,再打开该连接。例如:




<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSNtest="DRIVER={sql server};SERVER=ServerName;UID=USER;PWD=password;DATABASE=mydatabase"
Conn. Properties("Connect Timeout") = 15 '以秒为单位
Conn.open DSNtest
%>

  如果遇到查询超时的错误,我们可以在程序中修改 Recordset 对象的超时设置,再打开结果集。例如:




Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset
. . .
cmd1 = txtQuery.Text
Set rs = New ADODB.Recordset
rs.Properties("Command Time Out") = 300
'同样以秒为单位,如果设置为 0 表示无限制
rs.Open cmd1, cn
rs.MoveFirst
. . .

  五、小结

  本文针对大部分用户在使用 sql server 过程中常见的连接失败的错误,重点讨论了在使用 sql server 客户端工具以及用户开发的应用程序两种情况下,如何诊断并解决连接失败的错误。看过本文以后,相信每一个读者都会对 sql server 的连接工作原理、身份验证方式以及应用程序开发等有一个较为全面而深入的了解。

(0)

相关推荐

  • SQLServer 连接失败错误故障的分析与排除

    一般而言,有两种连接sql server 的方式,一是利用 sql server 自带的客户端工具,如企业管理器.查询分析器.事务探查器等:二是利用用户自己开发的客户端程序,如ASP 脚本.VB程序等,客户端程序中又是利用 ODBC 或者OLE DB等连接 sql server.下面,我们将就这两种连接方式,具体谈谈如何来解决连接失败的问题. 一."sql server 不存在或访问被拒绝" (WINDOWS平台上强大的数据库平台)连接失败错误故障的分析与排除(图一)" wi

  • SQL Server连接失败错误及解决第1/5页

    在使用 SQL Server 的过程中,用户遇到的最多的问题莫过于连接失败了.一般而言,有以下两种连接 SQL Server 的方式,一是利用 SQL Server 自带的客户端工具,如企业管理器.查询分析器.事务探查器等;二是利用用户自己开发的客户端程序,如ASP 脚本.VB程序等,客户端程序中又是利用 ODBC 或者 OLE DB 等连接 SQL Server.下面,我们将就这两种连接方式,具体谈谈如何来解决连接失败的问题. 一.客户端工具连接失败 在使用 SQL Server 自带的客户端

  • 通过端口1433连接到主机127.0.0.1的 TCP/IP 连接失败,错误:“connect timed out”的解决方法

    我们在连接数据库时总会出现一些问题,今天给大家分享遇到通过端口1433连接到主机127.0.0.1的 TCP/IP 连接失败.错误:"connect timed out的解决办法. 环境:SQLServer 2008 R2 + MyEclipse 6.5 + JDK 1.6.24   问题: Java通过JDBC连接SQLServer 2008,出现如下问题:通过端口1433 连接到主机127.0.0.1 的TCP/IP 连接失败.错误:"connect timed out.请验证连接

  • sqlserver连接错误之SQL评估期已过的问题解决

    很久没用sqlserver了,今天想打开sqlserver,导入数据做一下数据分析, 但当我打开sqlserver工具后连接数据库后,居然报错了.. 无法连接到 .. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接) (Microsoft SQ

  • WebSocket部署到服务器出现连接失败问题的分析与解决

    前言 前段时间在本地写的一个WebSocket程序部署到服务器上时出错,通过一段时间的研究,终于解决了,所以本文就来给大家分析下并给出解决的方法,下面话不多说了,来一起看看详细的介绍吧. 本地环境是:JDK1.8(32位) Tomcat8.0 服务器环境是:JDK1.8(64位) Tomcat8.0 本地运行是正常的. 在服务器部署运行时可以打开页面,并执行WebSocket连接失败并关闭的代码.如图: 问题解决: 1.在Tomcat8部署的项目不要导入catalina.jar和websocke

  • SQL数据库实例名称找不到或远程连接失败并显示错误error40的原因及解决办法

    分享由字符"\"转义引起的SQL数据库实例名称找不到或远程连接失败并显示错误error40的解决办法: 一.问题介绍 很久没有用c#去连数据库程序了,不过在网上找了一些资料,基本上还是写出来了,但是调试初步完成的程序时候,却发现在con.open()这个方法总是出错,说找不到数据库实例名称,或者远程连接失败,显示的错误是error40. 错误如下: 二.环境介绍 1.我的数据库是sqlserver2008,使用的开发环境是vs2013,.net4.0 2.我的数据库安装采用的命名实例,

  • Navicat连接MySQL错误描述分析

    本地使用Navicat连接 错误描述 2013-Lost connection to MySQL server at 'reading initial communication packet', system error:0 "Internal error/check (Not system error)" 解决方案 cd /etc/mysql/mysql.conf.d/ sudo vim mysqld.cnf 注释红框内容 重启MySQL服务 再次测试连接 环境 虚拟机版本 MyS

  • Redis偶发连接失败案例实战记录

    前言 本文主要给大家介绍了关于Redis偶发连接失败的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 [作者] 张延俊:携程技术保障中心资深DBA,对数据库架构和疑难问题分析排查有浓厚的兴趣. 寿向晨:携程技术保障中心高级DBA,主要负责携程Redis及DB的运维工作,在自动化运维,流程化及监控排障等方面有较多的实践经验,喜欢深入分析问题,提高团队运维效率. [问题描述]  生产环境有一个Redis会偶尔发生连接失败的报错,报错的时间点.客户端IP并没有特别明显的规律,

  • Sql Server "用户登录失败,错误编18456"的解决过程

    目录 1.说明 2.其他错误信息 排错分析 总结 Sql Server 解决“用户登录失败,错误编号18456” 1.说明 因密码或用户名错误而使身份验证失败并导致连接尝试被拒时,类似以下内容的消息将返回到客户端:“用户‘<user_name>’登录失败. (Microsoft SQL Server,错误:18456)”. 返回到客户端的其他信息有: “用户‘<user_name>’登录失败. (.Net SqlClient 数据访问接口)” -------------------

  • 始终“正在连接”的无线故障解决方法

    遭遇故障,初步排查 由于无线上网设备的"身价"不断下降,无线组网技术的逐步成熟,越来越多的单位甚至个人家庭都开始选用无线组网方式进行上网了.在尽情享受无线网络给我们带来方便.快捷的同时,我们有时也会遇到一些奇怪无线网络故障的"骚扰",碰到这些无法解决的无线上网故障,大家是不是有点扫兴? 可大家总不能一遇到芝麻大的小故障就去请专业技术人员来处理吧,有些无线网络故障自己动手完全可以顺利解决掉.这不,下面笔者就将自己曾经遭遇到的一例"正在连接"无线网络

随机推荐