MSOLEDBSQL 或 MSOLEDBSQL19 与 Azure 数据库的连接超时错误 - 工作正常 "from my machine"
Timeout errors on MSOLEDBSQL or MSOLEDBSQL19 connection to Azure database - working fine "from my machine"
我们有一个连接到 Azure 数据库的应用程序。当它建立连接时,连接字符串将如下所示:
Provider=MSOLEDBSQL;Server=<servernamehere>.database.windows.net;Database=<databasehere>;Uid=<whateverthisshouldbe>;Pwd=<whateverthatshouldbe>;MARS Connection=True;Application Name=<ourapplicationhere>;
我们最近也开始使用 MSOLEDBSQL19,所以如果安装了它,连接字符串可能是
Provider=MSOLEDBSQL19;Server=<servernamehere>.database.windows.net;Database=<databasehere>;Uid=<whateverthisshouldbe>;Pwd=<whateverthatshouldbe>;MARS Connection=True;Application Name=<ourapplicationhere>;
几点供参考:
- 当我 运行 我自己机器上的同一个应用程序连接到同一个数据库时,它每次都能完美运行。
- 我们在几个不同的 Azure 数据库上有几个客户端。这个客户端是一个相对较小的客户端,有 8 个用户。我们有多达 100 名用户的客户,他们在连接到各自的 Azure 数据库时从未遇到过此问题。
- 当我们尝试 运行 此客户端 PC 上的软件时,它会连接好几次,然后,几秒钟后,它会失败,只是在短时间内再次连接好。
这是连接失败时引发的错误:
无效的连接字符串 - 连接字符串没有连接:(见上文)
登录超时已过
建立与 SQL 服务器的连接时发生了与网络相关或特定于实例的错误。服务器未找到或不可访问。检查实例名称是否正确以及 SQL 服务器是否配置为允许远程连接。有关详细信息,请参阅 SQL 服务器在线书籍。
命名管道提供程序:无法打开与 SQL 服务器 [53]
的连接
因为我们有很多其他客户在连接到 他们的 Azure 数据库时从未遇到过这些问题,这些数据库与这个数据库具有相同的配置,我认为问题不在服务器端,不管这条消息是怎么说的以及我在网上找到的是什么。
我试过的
- 我在他们的互联网上进行了速度检查,发现它有一个非常可观的 100mbps 下降和几乎一样多。对于这种规模的网站来说应该足够了。
- 我认为问题与 DNS 有关,我将一个用户的以太网连接配置为使用 CloudFlare DNS 服务器。问题依然存在
- 再次在 DNS 领域,我将 IP 地址放入主机文件中的 Azure 服务器。问题依然存在
所以我卡住了。关于我们下一步可以尝试什么有什么建议吗?
让我感到奇怪的一件事是在内部异常中提到“Named Pipes Provider”。我本以为它使用 TCP/IP 但我知道什么?还是这里需要某种配置更改?
编辑:
为了排除故障,我在用户的机器上安装了 SSMS,并尝试连接到 tcp:.database.windows.net。这是我的发现:
- 单击“连接”。如果超过一秒钟,我会取消。再次单击“连接”。
- 这发生了 4 或 5 次。
- 点击“连接”,您不知道吗……直接进入。现在发生了什么!?
我还从 Windows 命令提示符 运行 powershell -Command "Test-NetConnection -ComputerName '<servernamehere>.database.windows.net' -Port 1433"
测试数据库网络连接并得到了一个奇怪的结果。第一次成功:
ComputerName : <servernamehere>.database.windows.net
RemoteAddress : NN.NN.NNN.NNN
RemotePort : 1433
InterfaceAlias : MyInterface
SourceAddress : xxx.xxx.xxx.xxx
TcpTestSucceeded : True
但是当我重复同样的命令时,它失败了。真正 st运行ge 是它在不同场合将相同的 ComputerName 解析为不同的 IP 地址:
ComputerName : <servernamehere>.database.windows.net
RemoteAddress : MM.MMM.MMM.M
RemotePort : 1433
InterfaceAlias : MyInterface
SourceAddress : xxx.xxx.xxx.xxx
TcpTestSucceeded : False
它有时解析为一个 IP 地址,有时解析为另一个 IP 地址。一个 IP 地址总是失败,另一个总是成功。
One thing that strikes me as odd is the mention of "Named Pipes Provider" in the inner exception. I would have thought it uses TCP/IP but what do I know? Or is there some kind of configuration change required here?
这是 TCP/IP 连接失败后的预期结果。如果 TCP 连接失败,客户端驱动程序将尝试命名管道。对命名管道的引用与您的问题无关。
What's really strange is that it resolves the SAME ComputerName to DIFFERENT IP addresses on different occasions
来自 Azure 外部的客户端连接连接到 Azure SQL 数据库网关,如 SQL Database Connectivity architecture 中所述。由于网关可能有多个 IP 地址(因地区而异),您可能会为相同的 DNS 名称获得不同的 IP 地址。
一个网关 IP 地址连接成功但另一个失败的症状表明您的客户端已阻止(或未列入白名单)问题 IP/subnet 或到该 IP/subnet 的 TCP 端口 1433 流量。请您的客户将托管您的 SQL 数据库的区域的网关 IP/subnet 列入白名单。网关 IP 地址和子网列在 Gateway IP address section of the documentation.
中
我们有一个连接到 Azure 数据库的应用程序。当它建立连接时,连接字符串将如下所示:
Provider=MSOLEDBSQL;Server=<servernamehere>.database.windows.net;Database=<databasehere>;Uid=<whateverthisshouldbe>;Pwd=<whateverthatshouldbe>;MARS Connection=True;Application Name=<ourapplicationhere>;
我们最近也开始使用 MSOLEDBSQL19,所以如果安装了它,连接字符串可能是
Provider=MSOLEDBSQL19;Server=<servernamehere>.database.windows.net;Database=<databasehere>;Uid=<whateverthisshouldbe>;Pwd=<whateverthatshouldbe>;MARS Connection=True;Application Name=<ourapplicationhere>;
几点供参考:
- 当我 运行 我自己机器上的同一个应用程序连接到同一个数据库时,它每次都能完美运行。
- 我们在几个不同的 Azure 数据库上有几个客户端。这个客户端是一个相对较小的客户端,有 8 个用户。我们有多达 100 名用户的客户,他们在连接到各自的 Azure 数据库时从未遇到过此问题。
- 当我们尝试 运行 此客户端 PC 上的软件时,它会连接好几次,然后,几秒钟后,它会失败,只是在短时间内再次连接好。
这是连接失败时引发的错误:
无效的连接字符串 - 连接字符串没有连接:(见上文)
登录超时已过
建立与 SQL 服务器的连接时发生了与网络相关或特定于实例的错误。服务器未找到或不可访问。检查实例名称是否正确以及 SQL 服务器是否配置为允许远程连接。有关详细信息,请参阅 SQL 服务器在线书籍。
命名管道提供程序:无法打开与 SQL 服务器 [53]
的连接因为我们有很多其他客户在连接到 他们的 Azure 数据库时从未遇到过这些问题,这些数据库与这个数据库具有相同的配置,我认为问题不在服务器端,不管这条消息是怎么说的以及我在网上找到的是什么。
我试过的
- 我在他们的互联网上进行了速度检查,发现它有一个非常可观的 100mbps 下降和几乎一样多。对于这种规模的网站来说应该足够了。
- 我认为问题与 DNS 有关,我将一个用户的以太网连接配置为使用 CloudFlare DNS 服务器。问题依然存在
- 再次在 DNS 领域,我将 IP 地址放入主机文件中的 Azure 服务器。问题依然存在
所以我卡住了。关于我们下一步可以尝试什么有什么建议吗?
让我感到奇怪的一件事是在内部异常中提到“Named Pipes Provider”。我本以为它使用 TCP/IP 但我知道什么?还是这里需要某种配置更改?
编辑:
为了排除故障,我在用户的机器上安装了 SSMS,并尝试连接到 tcp:.database.windows.net。这是我的发现:
- 单击“连接”。如果超过一秒钟,我会取消。再次单击“连接”。
- 这发生了 4 或 5 次。
- 点击“连接”,您不知道吗……直接进入。现在发生了什么!?
我还从 Windows 命令提示符 运行 powershell -Command "Test-NetConnection -ComputerName '<servernamehere>.database.windows.net' -Port 1433"
测试数据库网络连接并得到了一个奇怪的结果。第一次成功:
ComputerName : <servernamehere>.database.windows.net
RemoteAddress : NN.NN.NNN.NNN
RemotePort : 1433
InterfaceAlias : MyInterface
SourceAddress : xxx.xxx.xxx.xxx
TcpTestSucceeded : True
但是当我重复同样的命令时,它失败了。真正 st运行ge 是它在不同场合将相同的 ComputerName 解析为不同的 IP 地址:
ComputerName : <servernamehere>.database.windows.net
RemoteAddress : MM.MMM.MMM.M
RemotePort : 1433
InterfaceAlias : MyInterface
SourceAddress : xxx.xxx.xxx.xxx
TcpTestSucceeded : False
它有时解析为一个 IP 地址,有时解析为另一个 IP 地址。一个 IP 地址总是失败,另一个总是成功。
One thing that strikes me as odd is the mention of "Named Pipes Provider" in the inner exception. I would have thought it uses TCP/IP but what do I know? Or is there some kind of configuration change required here?
这是 TCP/IP 连接失败后的预期结果。如果 TCP 连接失败,客户端驱动程序将尝试命名管道。对命名管道的引用与您的问题无关。
What's really strange is that it resolves the SAME ComputerName to DIFFERENT IP addresses on different occasions
来自 Azure 外部的客户端连接连接到 Azure SQL 数据库网关,如 SQL Database Connectivity architecture 中所述。由于网关可能有多个 IP 地址(因地区而异),您可能会为相同的 DNS 名称获得不同的 IP 地址。
一个网关 IP 地址连接成功但另一个失败的症状表明您的客户端已阻止(或未列入白名单)问题 IP/subnet 或到该 IP/subnet 的 TCP 端口 1433 流量。请您的客户将托管您的 SQL 数据库的区域的网关 IP/subnet 列入白名单。网关 IP 地址和子网列在 Gateway IP address section of the documentation.
中