连接到 SQL 服务器时突然出现 "Login timeout expired" 错误

Suddenly getting "Login timeout expired" error when connecting to SQL Server

其他人也问过这个问题,但我没有找到专门解决我遇到的问题的答案,也没有找到解决问题的答案。所以我发布了问题和答案。

几天前,我有几个自动脚本连接到 SQL 服务器并导出一些数据,突然停止工作。他们已经 运行 7 年了,所以这很奇怪。这两个脚本使用不同的方法进行连接。一个使用 Perl 库,另一个使用 bcp 命令。但是两者都遇到了同样的错误。为了简洁起见,我将只显示 bcp 命令。这是 Windows Server 2008 上的全部 运行,以及 SQL Server 2008 R2,v10.50。这就是我 运行:

"C:\Program Files\Microsoft SQL Server0\Tools\Binn\bcp.exe" "<my query>" queryout "<output file name>" -T -S MYSERVER -c -k

这是我遇到的错误:

SQLState = 08001, NativeError = 10061
Error = [Microsoft][SQL Server Native Client 10.0]TCP Provider: No connection could be made because the target machine actively refused it.

SQLState = 08001, NativeError = 10061
Error = [Microsoft][SQL Server Native Client 10.0]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.

SQLState = S1T00, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Login timeout expired

解决方案非常简单。我只是将端口号添加到服务器名称(将 MYSERVER 更改为 MYSERVER,1433)。所以我最后的 bcp 命令看起来像:

"C:\Program Files\Microsoft SQL Server0\Tools\Binn\bcp.exe" "<my query>" queryout "<output file name>" -T -S MYSERVER,1433 -c -k

我不确定需要更改哪些内容,包括端口。但仅此而已。

奇怪的是,这不仅仅是默认端口。您会认为 bcp 会使用它而无需显式设置它。不过,这可能只是突然需要端口的一些奇怪的服务器配置。