SQL Server - 检查SQL连接错误问题的步骤

贴一篇翻译的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) 连接字符串
posted @ 2009-02-28 18:31  Dem  阅读(705)  评论(0编辑  收藏  举报