通常,当无法连接到SQL Server时,问题可能是:
- 网络问题,
- SQL Server配置问题。
- 防火墙问题
- 客户端驱动程序问题
- 应用程序配置问题。
- 身份验证和登录问题。
步骤1:网络问题
您可能能够在没有工作网络的情况下进行本地连接,但那是一种特殊情况。对于远程连接,需要稳定的网络。排除SQL连接性问题的第一件事是确保我们依赖的网络可用且稳定。请运行以下命令:
ping -a(使用-4和-6分别针对IPv4和IPv6)
ping -a
nslookup(多次输入本地和远程机器名称和IP地址)
注意查看返回结果上的任何不匹配之处。如果无法ping通目标计算机,则很有可能是网络故障或目标计算机未运行。尽管如此,目标计算机可能位于防火墙后,并且防火墙会阻止ping发送的数据包。Windows防火墙默认不阻止ping(ECHO)数据包。网络上DNS配置的正确性对于SQL连接至关重要。错误的DNS条目可能导致后续各种连接性问题。例如,请参见此链接“无法生成SSPI上下文”错误消息,DNS被中毒。
步骤2:SQL Server配置问题
您需要确保目标SQL Server正在运行并且正在侦听适当的协议。您可以使用SQL Server配置管理器(SCM)在服务器机器上启用协议。 SQL Server支持共享内存,命名管道和TCP协议(以及需要特殊硬件且很少使用的VIA)。对于远程连接,必须启用NP和/或TCP协议。一旦您在SCM中启用了协议,请确保重新启动SQL Server。
您可以打开错误日志文件以查看服务器是否成功侦听任何协议。错误日志文件的位置通常在:
%ProgramFile%Microsoft SQL Server/MSSQLxx.xxx/MSSQL/Log
如果目标SQL实例是命名实例,则还需要确保SQL Browser在目标计算机上运行。如果无法访问远程SQL Server,请要求管理员确保所有这些操作都已完成。
步骤3:防火墙问题
SQL Server机器上的防火墙(或客户端和服务器之间的任何位置)可能会阻止SQL连接请求。如果可以,隔离是否存在防火墙问题的简单方法是短时间关闭防火墙。长期解决方案是为SQL Server和SQL Browser设置例外。
针对NP协议,请确保文件共享在防火墙例外列表中。文件共享和NP都使用SMB协议。
针对TCP协议,您需要将SQL Server监听的TCP端口放到例外中。
针对SQL Browser,请将UDP端口1434加入例外。同时,您也可以将sqlservr.exe和sqlbrowser.exe加入例外,但这不被推荐。我们不信任的机器之间的IPSec也可能会阻止一些数据包。请注意,防火墙对于本地连接永远不应该成为问题。
第四步:客户端驱动程序问题
在这个阶段,你可以使用一些工具来测试你的连接。这些测试肯定要在客户端机器上进行。
首先尝试运行:
telnet
如果启用了TCP,则应能够通过telnet连接到SQL服务器TCP端口。否则,请返回检查步骤1-3。然后,使用OSQL、SQLCMD和SQL Management Studio测试SQL连接。如果您没有这些工具,请从Microsoft下载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也适用于此。此外,您可以使用“-Stcp:Your_target_machine, Tcp_port”用于TCP,“-Snp:Your_target_machine\Your_instance”用于NP,“-Slpc:Your_target_machine\Your_instance”用于共享内存。你会知道它是否失败了所有协议或只是某些特定的协议。
在这个阶段,你不应该再看到一般性错误信息,如错误26和错误40。如果你使用NP,并且仍然看到错误40(命名管道提供程序:无法打开到SQL Server的连接),请尝试以下步骤:
a)在您的服务器机器上打开文件共享。
b)运行“net view \your_target_machine”和“net use \your_target_machine\your_share”(您也可以从Windows资源管理器尝试映射网络驱动器)
如果b)失败了,则很有可能您有操作系统/网络配置问题,这不是SQL Server特定的。请先搜索互联网以解决此问题。
您可以尝试使用Windows认证和SQL认证进行连接。如果所有工具测试都失败了,那么步骤1-3很可能没有正确设置,除非失败是关于登录的,那么您可以查看第6步。
如果您在一些工具中成功了,但在其他工具中失败了,那么很可能是驱动程序问题。您可以在我们的论坛上发布问题并给出详细信息。
您还可以使用 Windows 自带的“\windows\system32\odbcad32.exe”来测试各种驱动程序的新 DSN 连接,但这仅适用于 ODBC。
步骤 5:应用问题
如果您在步骤 1-4 中成功了,但在应用程序中仍然看到失败,那么很可能是应用程序中的配置问题。考虑以下可能的问题:
a)您的应用程序是否在与您在步骤 4 中进行测试的帐户下运行?如果不是,您可能需要在该帐户下尝试进行步骤 4 的测试,或者如果可能的话,请更改为适用于您的应用程序的可工作服务帐户。
b)您的应用程序使用哪个 SQL 驱动程序?
c)您的连接字符串是什么?连接字符串是否与您的驱动程序兼容?请参考http://www.connectionstrings.com/。
步骤 6:身份验证和登录问题
这可能是解决 SQL 连接性问题最困难的部分。它通常与您网络、操作系统和 SQL Server 数据库的配置有关。这没有简单的解决方案,我们必须逐个解决。sql_protocols 中已经有几篇博客谈论了一些特殊情况,您可以检查它们是否适用于您的情况。除此之外,需要注意以下事项:
a)如果使用 SQL 身份验证,则必须启用混合身份验证。请参考此页面http://msdn.microsoft.com/en-us/library/ms188670.aspx。
b)确保您的登录帐户对您在登录期间使用的数据库(OLEDB 中的“Initial Catalog”)具有访问权限。
c)检查系统事件日志以查看更多信息。
参考资料:http://blogs.msdn.com/b/sql_protocols/archive/2008/04/30/steps-to-troubleshoot-connectivity-issues.aspx
很抱歉这么长的一段文字,希望其中的某些内容能帮助您解决您的问题!
祝好。