Azure机器学习工作室中R连接SQL数据库失败求助(Python可正常连接)
解决Azure ML中R通过ODBC连接SQL Server的0x2746错误
问题场景
在Azure机器学习工作室计算实例中,使用R的odbc包连接公司SQL数据库时触发错误:
Error: nanodbc/nanodbc.cpp:1118: 00000: [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2746 [Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection
但使用Python的pyodbc包,拆分SERVER与PORT参数的方式可成功连接;计算实例已安装对应ODBC驱动,终端运行R脚本也出现相同错误。
解决建议
1. 拆分SERVER与PORT参数
R的odbc包对Server,port格式的解析逻辑和Pythonpyodbc存在差异,尝试分开指定参数:
con <- odbc::dbConnect(odbc::odbc(), DRIVER="ODBC Driver 17 for SQL Server", SERVER="Server", PORT=1433, DATABASE="Database", UID="User", PWD="Password")
2. 强制指定TLS版本
错误码0x2746多因TLS版本不兼容导致,可在连接时显式指定TLS 1.2(多数企业SQL Server的要求版本):
con <- odbc::dbConnect(odbc::odbc(), DRIVER="ODBC Driver 17 for SQL Server", SERVER="Server", PORT=1433, DATABASE="Database", UID="User", PWD="Password", Encrypt="yes", TrustServerCertificate="no", TLS_Version="TLSv1.2")
3. 直接指定驱动文件路径
部分环境下驱动名称匹配存在异常,可在R中直接指定驱动的完整路径(Linux示例,Windows替换为对应dll路径):
con <- odbc::dbConnect(odbc::odbc(), DRIVER="/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.2.1", SERVER="Server", PORT=1433, DATABASE="Database", UID="User", PWD="Password")
可通过终端命令确认驱动路径:
odbcinst -q -d
4. 验证网络连通性
在计算实例终端测试SQL Server端口的连通性:
nc -zv Server 1433
若连通失败,需检查计算实例的网络安全组是否允许1433端口 outbound流量,以及公司SQL Server防火墙是否将Azure ML计算实例IP加入白名单。
内容的提问来源于stack exchange,提问作者nowyouredoingit
相关产品推荐
相关产品推荐

