基本上,当您无法连接到 SQL Server 时,问题可能是:
- 网络问题,
- SQL Server 配置问题。
- 防火墙问题
- 客户端驱动问题
- 应用程序配置问题。
- 身份验证和登录问题。
第 1 步:网络问题
您可能能够在没有工作网络的情况下进行本地连接,但这是一种特殊情况。对于远程连接,需要稳定的网络。解决 SQL 连接问题的第一件事是确保我们所依赖的网络是可用且稳定的。请运行以下命令:
ping -a(对 IPv4 和 IPv6 使用 -4 和 -6) 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,请让您的管理员确保所有这些都发生。
第三步:防火墙问题
SQL Server 机器(或客户端和服务器之间的任何位置)上的防火墙可能会阻止 SQL 连接请求。如果这是一个防火墙问题,一个简单的隔离方法是尽可能短时间关闭防火墙。长期解决方案是为 SQL Server 和 SQL Browser 设置例外。
对于 NP 协议,请确保文件共享在防火墙例外列表中。文件共享和 NP 都在下面使用 SMB 协议。对于 TCP 协议,您需要将 SQL Server 侦听的 TCP 端口置于异常中。对于 SQL 浏览器,请将 UDP 端口 1434 排除在外。同时,您也可以将 sqlservr.exe 和 sqlbrowser.exe 放入异常中,但不建议这样做。我们不受信任的机器之间的 IPSec 也可能会阻止一些数据包。请注意,防火墙不应该成为本地连接的问题。
第 4 步:客户端驱动程序问题
在这个阶段,您可以使用一些工具来测试您的连接。测试肯定需要在客户端机器上完成。
第一次尝试: 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 for Windows Auth osql -Uyour_user -SYour_target_machine\Your_instance for SQL Auth
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 Explorer 映射网络驱动器)如果您在 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/以供参考。
第 6 步:身份验证和登录问题
这可能是 sql 连接问题最困难的部分。它通常与您的网络、操作系统和 SQL Server 数据库的配置有关。对此没有简单的解决方案,我们必须逐案解决。sql_protocols 中已经有几个博客讨论了一些特殊情况,您可以查看它们,看看它们是否适用于您的情况。除此之外,要记住的事情: a) 如果您使用 SQL 身份验证,则必须启用混合身份验证。检查此页面以获取参考http://msdn.microsoft.com/en-us/library/ms188670.aspx
b) 确保您的登录帐户对您在登录期间使用的数据库具有访问权限(OLEDB 中的“初始目录”)。
参考:http: //blogs.msdn.com/b/sql_protocols/archive/2008/04/30/steps-to-troubleshoot-connectivity-issues.aspx
很抱歉这堵文字墙,我希望这里的一些东西可以帮助你解决你的问题!
问候。