You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure SQL Server使用Python执行Bulk Insert出现TCP Provider错误如何解决

Azure SQL Server Python执行Bulk Insert连接强制关闭问题解决方案

报错信息:TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host

1 网络层排查

  • 确认运行Python脚本的机器公网IP已经加入Azure SQL Server的入站防火墙允许列表,若机器使用动态公网IP需要及时更新规则
  • 检查本地网络的代理、VPN、企业防火墙是否拦截了 outbound 1433端口的请求,Azure SQL Server默认使用1433端口通信
  • 可以用telnet <你的SQL Server域名> 1433命令先测试端口连通性,排除基础网络故障

2 数据库连接配置调整

Bulk Insert操作耗时远高于普通查询,需要调整连接超时、保活相关参数避免被网关主动断开连接,以pyodbc驱动为例,参考连接配置:

import pyodbc
conn = pyodbc.connect(
    'DRIVER={ODBC Driver 18 for SQL Server};'
    'SERVER=tcp:<你的SQL Server地址>.database.windows.net,1433;'
    'DATABASE=<目标数据库名>;'
    'UID=<登录用户名>;'
    'PWD=<登录密码>;'
    'Encrypt=yes;'
    'TrustServerCertificate=no;'
    'Connection Timeout=300;'  # 连接超时设置为5分钟,可根据实际情况上调
    'Query Timeout=0;'  # 查询超时设为0即不限制,适配长耗时批量导入任务
    'KeepAlive=30;KeepAliveInterval=10;'  # 开启TCP保活,每30秒发送一次保活包
)

3 Bulk Insert操作优化

  • 拆分批量插入的数据集,不要一次性导入过大的文件/数据量,建议每次批量插入的行数控制在1万-10万区间(根据单行数据大小调整),分批次提交避免单次操作耗时过长触发连接中断
  • 避免在Bulk Insert执行过程中同时运行其他占用大量数据库资源的任务,Azure SQL Server达到资源负载上限时会主动断开超负载的连接
  • 若你直接调用BULK INSERTSQL语句读取本地文件,会触发权限错误,Azure SQL Server无法直接访问本地机器的文件:
    • 优先改用pyodbc的fast_executemany参数实现批量插入,示例代码:
      cursor = conn.cursor()
      cursor.fast_executemany = True
      insert_sql = "INSERT INTO 目标表 (列1,列2) VALUES (?,?)"
      cursor.executemany(insert_sql, 待插入数据列表)
      conn.commit()
      
    • 若必须使用原生BULK INSERT语句,需要先将数据文件上传到同区域的Azure Blob存储,配置共享访问签名后在SQL Server中创建外部数据源,再调用BULK INSERT读取存储中的文件

4 Azure侧配置检查

  • 查看Azure SQL Server的监控面板,确认CPU、内存、IOPS是否达到瓶颈,如果实例规格过低可以临时升配验证是否解决问题
  • 检查Azure SQL Server的连接策略,跨区域访问场景下建议切换为代理模式,减少连接中断概率

内容的提问来源于stack exchange,提问作者OGZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:36:03