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

Oracle ORA-3114、12571对应的SQL Server等效错误码咨询

SQL Server数据库自动重连适配错误码参考

可重连错误码清单

你原逻辑中匹配的ORA-03114、ORA-12571都是连接断开、网络传输异常类场景,SQL Server侧对应可触发重连的错误码如下:

  • -2:SqlClient定义的执行超时错误,对应网络不可达、实例无响应导致的超时场景。注意需要和业务慢查询场景做区分,避免误触发重连导致写操作重复执行
  • 0:客户端检测到连接已处于断开状态,通常是持有已关闭的连接执行操作时返回,和ORA-03114含义高度匹配
  • 233:传输层连接已被服务器关闭,属于连接中断场景
  • 10053:传输级错误,网络数据包传输失败,和ORA-12571含义高度匹配
  • 10054:远程主机强制关闭现有连接,通常是实例宕机、网络中断触发
  • 10060:连接超时,网络不可达触发
  • 10061:目标端口拒绝连接,通常是实例停服、端口未开放触发
  • 4060:无法打开登录请求的数据库,多出现于实例刚启动、数据库恢复未完成的临时场景
  • 18456:登录失败,仅适用于实例恢复阶段的临时登录失败场景,若为固定账号密码错误场景不会自动恢复,可根据实际需求决定是否加入

逻辑实现建议

捕获SqlException后遍历异常内的所有SqlError对象的Number属性,只要任意一个错误码命中上述清单即可触发重连,参考代码如下:

// 可重连错误码集合,可根据实际业务场景增删
private static readonly HashSet<int> ReconnectableErrorCodes = new HashSet<int>
{
    -2, 0, 233, 10053, 10054, 10060, 10061, 4060, 18456
};

// 异常处理分支
catch (SqlException ex)
{
    bool needReconnect = ex.Errors
        .Cast<SqlError>()
        .Any(error => ReconnectableErrorCodes.Contains(error.Number));
    
    if (needReconnect)
    {
        TryReconnect();
        // 重连完成后按需重试原有操作
    }
    else
    {
        throw;
    }
}

注意事项

  • 重连逻辑必须加最大重试次数限制,避免数据库实例彻底不可用时无限重试占用系统资源
  • 涉及写操作的重连重试需要保证业务逻辑幂等,避免重复执行写语句导致数据异常,该要求和原有Oracle重连逻辑一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:57:04