基本上,当您无法连接到 SQL Server 时,问题可能是:
- 网络问题,
- SQL Server 配置问题。
- 防火墙问题
- 客户端驱动问题
- 应用程序配置问题。
- 身份验证和登录问题。
第1步:网络问题
您也许可以在没有工作网络的情况下建立本地连接,但这是一种特殊情况。对于远程连接,需要稳定的网络。解决 SQL 连接问题的第一件事是确保我们所依赖的网络可用且稳定。请运行以下命令:
ping -a(特别对 IPv4 和 IPv6 使用 -4 和 -6)
平一
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/日志
如果目标 SQL 实例是命名实例,您还需要确保 SQL Browser 正在目标计算机上运行。如果您无法访问远程 SQL Server,请要求您的管理员确保所有这些都发生。
第三步:防火墙问题
SQL Server 计算机(或客户端和服务器之间的任何位置)上的防火墙可能会阻止 SQL 连接请求。隔离这是否是防火墙问题的一个简单方法是,如果可以的话,短时间关闭防火墙。长期解决方案是为 SQL Server 和 SQL Browser 设置例外。
对于 NP 协议,请确保文件共享位于防火墙例外列表中。文件共享和NP底层都使用SMB协议。
对于TCP协议,需要将SQL Server监听的TCP端口设置为异常。
对于SQL Browser,请将UDP端口1434置于例外状态。
同时,您也可以将sqlservr.exe和sqlbrowser.exe置于异常状态,但不建议这样做。我们不信任的机器之间的 IPSec 也可能会阻止某些数据包。请注意,防火墙绝不应该成为本地连接的问题。
第四步:客户端驱动问题
在此阶段,您可以使用一些工具测试连接。测试肯定需要在客户端计算机上完成。
第一次尝试:
远程登录
如果启用了 TCP,您应该能够远程登录到 SQL Server 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 也适用于此。此外,您可以对 TCP 使用“-Stcp:Your_target_machine, Tcp_port”,对 NP 使用“-Snp:Your_target_machine\Your_instance”,对共享内存使用“-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\system32\odbcad32.exe”(Windows 附带)通过为各种驱动程序添加新的 DSN 来测试连接,但这仅适用于 ODBC。
第五步:申请问题
如果您成功完成步骤 1-4,但应用程序中仍然出现失败,则应用程序中可能存在配置问题。在这里考虑几个可能的问题。
a) 您的应用程序是否与您在步骤 4 中测试的帐户在同一帐户下运行?如果没有,您可能需要尝试在步骤 4 中在该帐户下进行测试,或者如果可能的话,更改为您的应用程序的可用服务帐户。
b) 您的应用程序使用哪个 SQL 驱动程序?
c) 你的连接字符串是什么?连接字符串与您的驱动程序兼容吗?请检查http://www.connectionstrings.com/ http://www.connectionstrings.com/以供参考。
第6步:身份验证和登录问题这可能是 SQL 连接问题中最困难的部分。它通常与网络、操作系统和 SQL Server 数据库的配置有关。对此没有简单的解决方案,我们必须具体情况具体分析。 sql_protocols 中已经有几篇博客讨论了一些特殊情况,您可以检查它们,看看它们是否适用于您的情况。除此之外,还需要记住以下几点:
a) 如果您使用 SQL 身份验证,则必须启用混合身份验证。检查此页面以供参考http://msdn.microsoft.com/en-us/library/ms188670.aspx http://msdn.microsoft.com/en-us/library/ms188670.aspxb) 确保您的登录帐户具有登录时使用的数据库(OLEDB 中的“初始目录”)的访问权限。
c) 检查系统上的事件日志,看看是否有更多信息
参考: http://blogs.msdn.com/b/sql_protocols/archive/2008/04/30/steps-to-troubleshoot-connectivity-issues.aspx http://blogs.msdn.com/b/sql_protocols/archive/2008/04/30/steps-to-troubleshoot-connectivity-issues.aspx
很抱歉这面文字墙,我希望这里的内容可以帮助您解决您的问题!
Regards.