SQL Server - 检查SQL连接错误问题的步骤
贴一篇翻译的FAQ(我要是能写出这种水平就好了。。。),对于最常见的SQL连接问题,该步骤几乎应该都能应付。
FAQ:检查SQL连接错误问题的步骤
Q:我遇到过很多SQL连接错误,是否有一个解决连接问题的向导?
A:
基本上,当您不能连接您的SQL Server数据库时,问题可能会如下:
1) 网络问题
2) SQL Server配置问题
3) 防火墙问题
4) 客户端驱动问题
5) 应用程序配置问题
6) 认证和登陆问题
1) 网络问题
2) SQL Server配置问题
3) 防火墙问题
4) 客户端驱动问题
5) 应用程序配置问题
6) 认证和登陆问题
步骤1:网络问题
对于远程连接,一个稳定的网络是必要的。所以第一件要做的就是检查SQL的连接性问题,以确认我们依赖的网络是稳定和可工作的。请运行如下命令:
ping -a <您的目标机> (对于IPv4和IPv6分别使用 -4 and -6)
ping -a <您的远程IP地址>
nslookup(请多次输入您的本地和远程机器名和IP地址)
对于远程连接,一个稳定的网络是必要的。所以第一件要做的就是检查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服务。
您需要确认目标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可能会导致某些包被阻止。请注意防火墙不会成为本地连接的问题原因(本地连接不经过防火墙)。
对于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免费获得这些工具。
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(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验证)
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特有的错误。很可能您在前三个步骤中没有很好地设置,不然就可能是登录相关问题,这样您可以直接跳到第六个步骤。
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/
如果您在前四个步骤成功但依然在您的应用程序中看到错误,那么很可能这是由您应用程序中的连接问题导致。请考虑如下的可能的问题:
a) 您的应用程序是否使用与第四个步骤相同的帐号进行连接?如果不是的话,您可能需要换一个可工作的服务帐号来进行第四步骤的测试。
b) 您的应用程序使用的是何种SQL驱动?
c) 您的连接字符串是什么?该连接字符串是否与您的驱动兼容?更多请参考http://www.connectionstrings.com/
步骤6:认证和登录问题
这可能是SQL连接问题中最复杂的部分了。这可能与您的网络,操作系统和SQL Server数据库都有关系。对于该问题没有一个简单的解决方案,需要具体问题具体分析。
这可能是SQL连接问题中最复杂的部分了。这可能与您的网络,操作系统和SQL Server数据库都有关系。对于该问题没有一个简单的解决方案,需要具体问题具体分析。
请牢记:
a) 如果您使用了SQL验证,必须先允许混合验证。请检查http://msdn.microsoft.com/en-us/library/ms188670.aspx获得更多内容
b) 请确认您的登录帐号对于您使用的数据库有足够的访问权限
c) 请检查错误日志已获得更多详细信息
a) 如果您使用了SQL验证,必须先允许混合验证。请检查http://msdn.microsoft.com/en-us/library/ms188670.aspx获得更多内容
b) 请确认您的登录帐号对于您使用的数据库有足够的访问权限
c) 请检查错误日志已获得更多详细信息
如果对于以上步骤您有任何问题欢迎发在新闻组中
对于纠错,对于我们最重要的是a) 准确的错误信息 b) 连接字符串
对于纠错,对于我们最重要的是a) 准确的错误信息 b) 连接字符串