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
相关产品推荐
相关产品推荐

