间歇性 ODBC 连接失败

问题描述 投票:0回答:2

我们正在开发一个内部 32 位应用程序。该应用程序连接到 SQL Server。测试环境为SQL Server 2008 R2,上线环境为SQL Server 2014 SP2。

使用此 ODBC 字符串连接到数据库:

Driver={SQL Server};Server=<redacted>;Database=<redacted>;Trusted_Connection=Yes;

此数据库的用户属于“域本地”安全组。我们有来自三个不同 AD 域的用户作为该组的成员。该组被定义为 SQL Server 的登录名和目标数据库的用户。在测试环境中,效果很好。

在实际环境中,只有部分用户能够成功连接数据库。有趣的是,位于安全组但与服务器不在同一域中的用户可以连接。与服务器位于同一域中的用户不能。 (我没有检查过所有 25 个用户,但这就是我看到的模式)。拥有数据库服务器系统管理员权限的用户(比如我)没有任何问题。

我已经仔细研究了我能想到的所有事情,试图找出为什么它在一台服务器上工作但在另一台服务器上不起作用,但没有运气。我尝试过以用户身份删除该组并重新添加,将用户从该组中取出然后重新放入,等等。 SQL Server 服务在两台服务器上的同一域帐户下运行。

任何见解都值得赞赏。

sql-server odbc
2个回答
1
投票

我过去遇到过很多问题,以下方法有效:

  1. 导航至“开始”|微软 SQL Server 2014 | SQL Server 2014 配置管理器。

展开 SQL Server 网络配置,然后单击 2008 实例。执行此操作后,在您的右侧,您会注意到共享内存、命名管道和 TCP/IP。打开命名管道并启用它(如果已禁用)。打开 TCP/IP 并启用它,但在 TCP/IP 上,您还会注意到一个名为“IP 地址”的辅助选项卡。单击此选项卡并为所有 IP 地址(或仅您要激活的 IP 地址)单独启用每个 IP 地址。 您还会注意到,有一个 TCP 端口,其中 SQL 的默认端口是 1433。但是,当您在同一台计算机上安装了多个 SQL 实例时,我通常会拆分端口号。即第一个实例,我设置为 1433,第二个实例,我设置为 1435。请参见下面的屏幕截图:

请注意,我删除了 TCP 动态端口中的零。

当你走到最后时,设置如下截图:

完成所有设置后,单击“应用”、“确定”,然后单击“确定”。

  1. 导航至“开始”|运行。

输入 cliconfg(您必须在每台有连接问题的计算机上执行此操作),然后单击“确定”。

启用命名管道和 TCP/IP,然后勾选启用共享内存协议选项,如下所示:

单击“应用”,然后单击“确定”。

  1. 导航到“开始运行”,输入 services.msc,然后单击“确定”。

导航到 SQL Server 的两个实例并重新启动它们。

同时打开 SQL Server 浏览器,将其从“禁用”更改为“自动”,然后输入您的 AD 用户名和密码。

单击“应用”和“确定”,然后启动浏览器。

如果此后您仍然遇到连接问题,请尝试禁用 Windows 防火墙或添加端口例外,如答案中前面提到的。

如果您仍有问题,请回复此答案,我将进一步帮助您...

编辑:

在工作站上,单击开始 |运行,然后输入 cliconfg 并单击确定。

启用 TCP/IP 和命名管道,然后勾选选项 启用共享内存协议,然后单击确定。


-1
投票

感谢 Birel 为我指明了正确的方向。答案是,在新的 2014 服务器上,“SQL Server 浏览器服务”没有运行。我把它设置为自动启动,然后启动它。这解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.