Ubuntu 上 SQL Server 错误代码解析与处理
一 常见错误代码速查
| 错误码或现象 |
含义 |
快速定位 |
修复要点 |
| 0x2AF9(十进制 10905) |
Windows 套接字 WSAECONNREFUSED,目标主机明确拒绝连接 |
在客户端执行:ping 主机;nc -zv 主机 端口;检查路由 |
确认实例在监听该端口、服务已启动、路由与防火墙放行;必要时启用/检查 SQL Server Browser 与端口直连配置 |
| Login timeout expired |
连接超时(默认 15 秒) |
提高 -l 超时、用 nc/telnet 测端口、抓包 |
增大超时、修复网络/端口不通、确保实例监听正确端口 |
| ODBC 18 SSL routines::certificate verify failed: self-signed certificate |
客户端无法验证服务器自签名证书 |
复现命令加 -vv 查看握手细节 |
测试环境可临时关闭加密验证;生产环境导入/信任服务器证书,或使用有效 CA 签发证书 |
| error while loading shared libraries: liblber-2.4.so.2 / libssl1.1 |
缺少依赖库 |
ldd 检查 sqlcmd/驱动依赖 |
安装缺失库(如 libldap-2.4-2、libssl1.1),或升级驱动/系统兼容库 |
| Server is not found or not accessible |
实例名解析失败或服务不可达 |
核对主机名/实例名/端口;检查监听 |
使用“主机名\实例名,端口”或“IP,端口”直连;确认服务运行与监听端口一致 |
| Connection forcibly closed |
连接被对端强制关闭 |
检查网络稳定性、TLS/证书、协议卸载设置 |
排查网络丢包/中断、证书有效性、禁用有问题的协议卸载特性 |
| SQL Server 服务无法启动 |
实例未能初始化 |
查看 /var/log/sqlserver/MSSQLSERVER.log;检查资源与权限 |
释放磁盘/内存、校正目录权限、按日志报错逐项修复配置 |
| 以上条目涵盖了在 Ubuntu 环境下高频出现的错误码与现象、定位方法与修复思路,便于快速排查与恢复业务。 |
|
|
|
二 连接类错误深入解析
-
错误码 0x2AF9 与超时类问题
- 含义与判断:0x2AF9 即 WSAECONNREFUSED,常见于目标端口未监听、服务未启动、被防火墙拒绝或实例名解析失败。超时则多为网络不通或监听端口错误。
- 定位步骤:
- 基础连通:ping 主机;nc -zv 主机 端口;必要时 traceroute 检查路由。
- 监听确认:在服务器上查询错误日志或执行查询,确认实例正在监听指定端口(默认 1433 或命名实例的高位数端口)。
- 命令示例(Linux 需双反斜杠转义):
- /opt/mssql-tools/bin/sqlcmd -S “DEST\c745601-0,38970” -U “sa” -P “YourPassword” -d “master” -Q “SELECT @@SERVERNAME”
- 处理要点:确保实例启动并监听正确端口;放通防火墙;必要时启用/检查 SQL Server Browser;使用“主机,端口”直连可规避解析问题。
-
ODBC 18 自签名证书验证失败
- 典型报错:SSL Provider: [error:0A000086:SSL routines::certificate verify failed:self-signed certificate]
- 处理要点:
- 开发/测试:可临时关闭加密验证(不推荐生产)。
- 生产:将服务器证书导入客户端信任库,或使用有效 CA 签发证书,确保证书链完整与主机名匹配。
三 安装与驱动类错误
-
共享库缺失
- 现象:error while loading shared libraries: liblber-2.4.so.2 或 libssl1.1
- 处理:安装缺失依赖(如 libldap-2.4-2、libssl1.1),或使用与系统版本匹配的 ODBC 驱动版本,确保库路径可被加载。
-
SQL Server 服务无法启动
- 处理流程:
- 查看错误日志:/var/log/sqlserver/MSSQLSERVER.log,定位初始化失败原因。
- 检查资源:磁盘空间、内存、CPU 是否充足。
- 检查权限:安装目录与数据目录权限正确,服务账户具备所需权限。
四 高效排查命令清单
- 服务与日志
- 查看 SQL Server 错误日志:cat /var/log/sqlserver/MSSQLSERVER.log
- 查看系统日志:journalctl -u mssql-server --since “10 minutes ago” -e
- 网络连通
- 端口探测:nc -zv 主机 端口;或 telnet 主机 端口
- 路由跟踪:traceroute 主机
- 监听与实例
- 查询实例名:SELECT @@SERVERNAME
- 查询监听端口:EXEC xp_readerrorlog 0, 1, N’Server is listening on’
- 连接测试
- 直连测试:/opt/mssql-tools/bin/sqlcmd -S “主机,端口” -U “sa” -P “密码” -Q “SELECT 1”
以上命令覆盖服务状态、日志、网络与实例监听的关键环节,有助于快速定位问题根因。