SQL Server - 检查SQL连接错误问题的步骤
2009-02-28 18:31
781 查看
贴一篇翻译的FAQ(我要是能写出这种水平就好了。。。),对于最常见的SQL连接问题,该步骤几乎应该都能应付。
FAQ:检查SQL连接错误问题的步骤
Q:我遇到过很多SQL连接错误,是否有一个解决连接问题的向导?
A:
基本上,当您不能连接您的SQL Server数据库时,问题可能会如下:
1) 网络问题
2) SQL Server配置问题
3) 防火墙问题
4) 客户端驱动问题
5) 应用程序配置问题
6) 认证和登陆问题
步骤1:网络问题
对于远程连接,一个稳定的网络是必要的。所以第一件要做的就是检查SQL的连接性问题,以确认我们依赖的网络是稳定和可工作的。请运行如下命令:
ping -a <您的目标机> (对于IPv4和IPv6分别使用 -4 and -6)
ping -a <您的远程IP地址>
nslookup(请多次输入您的本地和远程机器名和IP地址)
如果您不能ping通您的目标机,很可能是因为网络故障或目标机器没有运行。很可能网络故障或目标机器没有在运行。但也可能是因为目标机在防火墙之后而防火墙阻止了ping包。网络中DNS的正确设置对于SQL连接也是非常重要的。错误的DNS登记也可能导致之后各种各样的连接问题。
步骤2:SQL Server配置问题
您需要确认目标SQL Server正在运行,而且在合适的协议中监听。您可以使用SQL Server Configuration Manager (SCM)来允许服务器端的协议。对于远程连接,NP和/或TCP protocols必须被允许。在您在SCM中允许了协议后,请确认重新启动SQL Server服务。
您可以打开错误日志文件来查看服务其是否监听在合适的端口。错误日志的位置默认位于%ProgramFile%Microsoft SQL Server/MSSQLxx.xxx/MSSQL/Log
步骤3:防火墙问题
对于NP协议,请确认文件共享在防火墙的例外列表中。文件共享和NP都使用SMB协议。
对于TCP协议您需要将SQL Server监听的TCP端口置于例外列表中。
对于SQL Browser,请将UDP 1434端口置于例外列表中。
同时,您可以将sqlservr.exe和sqlbrowser.exe也放到例外列表中。但我们不信任的机器间的IPSEC可能会导致某些包被阻止。请注意防火墙不会成为本地连接的问题原因(本地连接不经过防火墙)。
步骤4:客户端驱动问题
在这个阶段,您可以使用某些来测试您的连接。作为确认,测试需要在客户端机器上进行。
请首先尝试:
telnet <您的目标机> <TCP端口>
您应该能够telnet到目标机器SQL Server的TCP端口如果TCP被设置为允许的话。如果不行的话请返回到前三个步骤再次检查。然后使用OSQL,SQLCMD和SQL Management Studio来测试SQL连接。如果您没有这些工具,请从微软官方网站下载SQL Express免费获得这些工具。
OSQL(SQL Server 2000附带)使用MDAC。
OSQL(SQL Server 2005和2008附带)使用SNAC ODBC。
SQLCMD(SQL Server 2005和2008附带)使用SNAC OLEDB。
SQL Management Studio(SQL Server 2005和2008附带)使用SQLClient。
命令大致如下:
osql -E -SYour_target_machine\Your_instance (对于Windows验证)
osql -Uyour_user -SYour_target_machine\Your_instance (对于SQL验证)
SQLCMD也可以这样应用。此外您也可以对TCP使用“-Stcp:Your_target_machine, Tcp_port”,对NP使用“-Snp:Your_target_machine\Your_instance”,对Shared Memory使用“-Slpc:Your_target_machine\Your_instance”。您需要知道只对某些协议失败还是对于所有协议都失败。
在这个阶段,您应该不再会看到通常的错误信息诸如ERROR 26和ERROR 40了。如果您使用NP而且您依然看见error 40 (Named Pipes Provider: Could not open a connection to SQL Server),请尝试如下步骤:
a) 在您的服务器上打开一个文件共享
b) 运行“net view \\your_target_machine”和“net use \\your_target_machine\your_share”(您也可以尝试在Windows Explorer中映射网络驱动器)
如果您在第二个步骤得到错误,那么很可能您存在操作系统/网络故障,而非SQL Server特有的错误。很可能您在前三个步骤中没有很好地设置,不然就可能是登录相关问题,这样您可以直接跳到第六个步骤。
如果使用部分工具您能成功连接,但使用另外一些工具失败,那么很可能是驱动问题。
您也可以使用“\windows\system32\odbcad32.exe”(内嵌于Windows)对于不同的驱动通过增加新的DSN来测试连接,不过这仅对于ODBC有效。
步骤5:应用程序问题
如果您在前四个步骤成功但依然在您的应用程序中看到错误,那么很可能这是由您应用程序中的连接问题导致。请考虑如下的可能的问题:
a) 您的应用程序是否使用与第四个步骤相同的帐号进行连接?如果不是的话,您可能需要换一个可工作的服务帐号来进行第四步骤的测试。
b) 您的应用程序使用的是何种SQL驱动?
c) 您的连接字符串是什么?该连接字符串是否与您的驱动兼容?更多请参考http://www.connectionstrings.com/
步骤6:认证和登录问题
这可能是SQL连接问题中最复杂的部分了。这可能与您的网络,操作系统和SQL Server数据库都有关系。对于该问题没有一个简单的解决方案,需要具体问题具体分析。
请牢记:
a) 如果您使用了SQL验证,必须先允许混合验证。请检查http://msdn.microsoft.com/en-us/library/ms188670.aspx获得更多内容
b) 请确认您的登录帐号对于您使用的数据库有足够的访问权限
c) 请检查错误日志已获得更多详细信息
如果对于以上步骤您有任何问题欢迎发在新闻组中
对于纠错,对于我们最重要的是a) 准确的错误信息 b) 连接字符串
其他相关资源
http://support.microsoft.com/kb/888228
http://blogs.msdn.com/sql_protocols/archive/2005/12/19/505372.aspx
FAQ:检查SQL连接错误问题的步骤
Q:我遇到过很多SQL连接错误,是否有一个解决连接问题的向导?
A:
基本上,当您不能连接您的SQL Server数据库时,问题可能会如下:
1) 网络问题
2) SQL Server配置问题
3) 防火墙问题
4) 客户端驱动问题
5) 应用程序配置问题
6) 认证和登陆问题
步骤1:网络问题
对于远程连接,一个稳定的网络是必要的。所以第一件要做的就是检查SQL的连接性问题,以确认我们依赖的网络是稳定和可工作的。请运行如下命令:
ping -a <您的目标机> (对于IPv4和IPv6分别使用 -4 and -6)
ping -a <您的远程IP地址>
nslookup(请多次输入您的本地和远程机器名和IP地址)
如果您不能ping通您的目标机,很可能是因为网络故障或目标机器没有运行。很可能网络故障或目标机器没有在运行。但也可能是因为目标机在防火墙之后而防火墙阻止了ping包。网络中DNS的正确设置对于SQL连接也是非常重要的。错误的DNS登记也可能导致之后各种各样的连接问题。
步骤2:SQL Server配置问题
您需要确认目标SQL Server正在运行,而且在合适的协议中监听。您可以使用SQL Server Configuration Manager (SCM)来允许服务器端的协议。对于远程连接,NP和/或TCP protocols必须被允许。在您在SCM中允许了协议后,请确认重新启动SQL Server服务。
您可以打开错误日志文件来查看服务其是否监听在合适的端口。错误日志的位置默认位于%ProgramFile%Microsoft SQL Server/MSSQLxx.xxx/MSSQL/Log
步骤3:防火墙问题
对于NP协议,请确认文件共享在防火墙的例外列表中。文件共享和NP都使用SMB协议。
对于TCP协议您需要将SQL Server监听的TCP端口置于例外列表中。
对于SQL Browser,请将UDP 1434端口置于例外列表中。
同时,您可以将sqlservr.exe和sqlbrowser.exe也放到例外列表中。但我们不信任的机器间的IPSEC可能会导致某些包被阻止。请注意防火墙不会成为本地连接的问题原因(本地连接不经过防火墙)。
步骤4:客户端驱动问题
在这个阶段,您可以使用某些来测试您的连接。作为确认,测试需要在客户端机器上进行。
请首先尝试:
telnet <您的目标机> <TCP端口>
您应该能够telnet到目标机器SQL Server的TCP端口如果TCP被设置为允许的话。如果不行的话请返回到前三个步骤再次检查。然后使用OSQL,SQLCMD和SQL Management Studio来测试SQL连接。如果您没有这些工具,请从微软官方网站下载SQL Express免费获得这些工具。
OSQL(SQL Server 2000附带)使用MDAC。
OSQL(SQL Server 2005和2008附带)使用SNAC ODBC。
SQLCMD(SQL Server 2005和2008附带)使用SNAC OLEDB。
SQL Management Studio(SQL Server 2005和2008附带)使用SQLClient。
命令大致如下:
osql -E -SYour_target_machine\Your_instance (对于Windows验证)
osql -Uyour_user -SYour_target_machine\Your_instance (对于SQL验证)
SQLCMD也可以这样应用。此外您也可以对TCP使用“-Stcp:Your_target_machine, Tcp_port”,对NP使用“-Snp:Your_target_machine\Your_instance”,对Shared Memory使用“-Slpc:Your_target_machine\Your_instance”。您需要知道只对某些协议失败还是对于所有协议都失败。
在这个阶段,您应该不再会看到通常的错误信息诸如ERROR 26和ERROR 40了。如果您使用NP而且您依然看见error 40 (Named Pipes Provider: Could not open a connection to SQL Server),请尝试如下步骤:
a) 在您的服务器上打开一个文件共享
b) 运行“net view \\your_target_machine”和“net use \\your_target_machine\your_share”(您也可以尝试在Windows Explorer中映射网络驱动器)
如果您在第二个步骤得到错误,那么很可能您存在操作系统/网络故障,而非SQL Server特有的错误。很可能您在前三个步骤中没有很好地设置,不然就可能是登录相关问题,这样您可以直接跳到第六个步骤。
如果使用部分工具您能成功连接,但使用另外一些工具失败,那么很可能是驱动问题。
您也可以使用“\windows\system32\odbcad32.exe”(内嵌于Windows)对于不同的驱动通过增加新的DSN来测试连接,不过这仅对于ODBC有效。
步骤5:应用程序问题
如果您在前四个步骤成功但依然在您的应用程序中看到错误,那么很可能这是由您应用程序中的连接问题导致。请考虑如下的可能的问题:
a) 您的应用程序是否使用与第四个步骤相同的帐号进行连接?如果不是的话,您可能需要换一个可工作的服务帐号来进行第四步骤的测试。
b) 您的应用程序使用的是何种SQL驱动?
c) 您的连接字符串是什么?该连接字符串是否与您的驱动兼容?更多请参考http://www.connectionstrings.com/
步骤6:认证和登录问题
这可能是SQL连接问题中最复杂的部分了。这可能与您的网络,操作系统和SQL Server数据库都有关系。对于该问题没有一个简单的解决方案,需要具体问题具体分析。
请牢记:
a) 如果您使用了SQL验证,必须先允许混合验证。请检查http://msdn.microsoft.com/en-us/library/ms188670.aspx获得更多内容
b) 请确认您的登录帐号对于您使用的数据库有足够的访问权限
c) 请检查错误日志已获得更多详细信息
如果对于以上步骤您有任何问题欢迎发在新闻组中
对于纠错,对于我们最重要的是a) 准确的错误信息 b) 连接字符串
其他相关资源
http://support.microsoft.com/kb/888228
http://blogs.msdn.com/sql_protocols/archive/2005/12/19/505372.aspx
相关文章推荐
- vs 或 Sql server2012连接Sql server时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误
- Error:System.Data.SqlClient.SqlException: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误,请检查远程连接是否开启。解决方法
- provider:命名管道提供程序,error:40 - 无法打开到SQL Server的连接 (Microsoft SQL Server, 错误:53)
- 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在
- SqlServer2005 provider: TCP 提供程序, error: 0 - 由于目标计算机积极拒绝,无法连接。) (Microsoft SQL Server,错误: 10061)问题解决
- sql 2005 用户 sa 登录失败,该用户与可信SQL Server连接无关联 错误18452
- Sql Server 2005 与Sql Server Mobile(Sql server 2005 mobile Edition)数据同步步骤以及问题解决方案
- 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在
- sql 2005 用户 sa 登录失败,该用户与可信SQL Server连接无关联 错误18452
- 【SQL Server 2005 的问题】com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联。
- sql server存储过程:错误21037: [SQL-DMO]在Text 属性的“CREATE...”语句中指定的名称必须与Name....问题解决
- provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (Microsoft SQL Server,错误: 53
- 在与 SQL Server 建立连接(或者远程连接)出现与网络相关的或特定于实例的错误。Microsoft SQL Server,错误: 10061
- 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在
- SQL中,无法连接到本机服务器,error:40-无法打开到SQL Server的连接(Microsoft SQL Server,错误:2)
- (转载)MSSQL:Sql server2012连接Sql server 2008时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误。(provider:SSL Provider,error:0-接收到的消息异常,或格式不正确。) - Empty.
- 【J2EE】Java连接SQL Server 2000问题:“com.microsoft.sqlserver.jdbc.SQLServerException:用户'sa'登录失败。该用户与可信SQL Server连接无关联”
- 关于SQL Server 2005服务无法启动,报3417错误。(附带重装SQL时解决COM+目录问题)(转帖)
- SQL Server 2008 问题——已成功与服务器建立连接,但是在登录过程中发生错误。
- SqlServer问题:sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connectio