Access 2013连接Azure SQL Server的ODBC数据源数分钟后失效求助
Access 2013连接Azure SQL Server数分钟后连接异常的排查与解决
问题背景
使用Access 2013(含业务表单)连接Azure SQL Server 12.0中的34个链接表,先后采用「SQL Server Native Client 11.0」和「ODBC Driver 18 for SQL Server」创建ODBC数据源,导入时均已保存SQL Server Authentication密码。数据库启动初期表单可正常返回数据,但数分钟后会触发以下错误之一,且报错后数据库完全无法使用:
TCP Provider: An existing connection was forcibly closed by the remote host.
ODBC--connection to 'Data Source' failed.
排查与解决步骤
一、网络稳定性验证
- 检查Azure SQL防火墙规则:登录Azure门户,进入目标SQL Server的「防火墙和虚拟网络」设置,确认客户端IP(动态IP需添加IP范围或启用「允许Azure服务和资源访问此服务器」)未被拦截,查看「拒绝的连接」日志定位是否有IP被临时屏蔽。
- 持续监测网络连通性:
- 执行
ping <你的Azure SQL服务器名>.database.windows.net,观察5-10分钟内是否有丢包、延迟突增情况; - 执行
tracert <你的Azure SQL服务器名>.database.windows.net,检查路由节点是否存在异常中断; - 执行
telnet <你的Azure SQL服务器名>.database.windows.net 1433,测试1433端口是否持续保持连通。
- 执行
- 排查本地网络设备:临时关闭本地防火墙、杀毒软件的网络防护模块,测试是否为本地安全策略拦截长连接;检查路由器是否配置了闲置连接自动断开的超时规则,如有则延长超时时间。
二、ODBC连接参数优化
- 调整超时设置:在ODBC数据源配置的「连接」选项卡,将「登录超时」「查询超时」调至60秒以上;编辑链接表的ODBC连接字符串,添加
Connect Timeout=60;Connection Lifetime=0;(Connection Lifetime=0表示连接永不自动过期)。 - 启用连接池:在ODBC数据源的「高级」选项卡,勾选「启用连接池」,设置池大小为40-50(匹配34个链接表的并发需求),减少连接频繁创建销毁带来的不稳定。
- 强制加密连接:ODBC Driver 18默认要求加密,确认数据源配置中「加密」选项设为「强制」,避免加密协商过程中出现连接中断。
三、Access应用层优化
- 释放闲置记录集:在表单的
Close事件中添加代码,主动关闭未释放的记录集,避免占用连接资源:
Private Sub Form_Close() Dim rs As Recordset For Each rs In CurrentDb.Recordsets rs.Close Next rs Set rs = Nothing End Sub
- 优化数据加载逻辑:避免表单启动时一次性拉取全量数据,改用分页查询或按需加载;检查是否存在耗时超过30分钟的长查询,此类查询可能触发Azure SQL的连接中断机制。
- 统一链接表连接:使用Access「外部数据」-「链接表」功能创建链接(而非导入),确保所有链接表使用同一ODBC数据源,避免生成多个独立连接导致资源耗尽。
四、Azure SQL Server端检查
- 监控资源使用率:在Azure门户查看SQL Server的CPU、内存、磁盘IO指标,确认是否因资源耗尽主动断开连接;若存在瓶颈,考虑升级服务层级或优化数据库查询性能。
- 查看SQL错误日志:在Azure门户的SQL Server「诊断设置」中开启日志收集,分析错误日志中针对该客户端连接的断开记录,明确是SQL Server主动断开还是网络层面问题。
内容的提问来源于stack exchange,提问作者Christopher Page
相关产品推荐
相关产品推荐

