相当于SQL Server的Oracle错误号



我正在做一个。net应用程序从Oracle迁移到SQL Server数据库。该应用程序是在2000年由第三方开发的,因此我们打算尽可能少地修改它,以避免引入新的错误。

我替换了Oracle对SqlClient的引用(OracleConnectionSqlConnection,OracleTransactionSqlTransaction等),一切都很好。然而,我有一个逻辑问题,试图在错误的情况下重新连接到DB。

如果在尝试读写数据库时出现问题,则调用TryReconnect方法。这个方法检查Oracle异常号是3114还是12571;如果是,则尝试重新打开连接。

我检查了这些错误代码:

  • ORA-03114: Not Connected to Oracle
  • ORA-12571: TNS: packet writer failure

我搜索了SQL Server的等效错误代码,但我找不到它们。我检查了MSSQL和。net SqlClient文档,但我不确定其中任何一个是否等同于ORA-3114和ORA-12571。

有人能帮我决定在这个逻辑中应该检查哪些错误号码吗?我想检查代码0(我看到它发生时,我停止数据库强制一个错误和测试这个)和-2(超时过期),但我真的不确定它。

行为不同。你不能把SQL Server的重试逻辑建立在Oracle的语义上。对于初学者来说,即使在旧的System.Data.SqlClient库中,SqlConnection也会重试连接。它的替代品Microsoft.Data.SqlClient包含可配置的重试逻辑,以处理从本地应用程序到云数据库的连接,例如本地应用程序连接到Azure SQL。这个重试逻辑在当前RTM版本3.0.0中默认是开启的。

您还可以查看高级弹性库,如Polly,这是一个非常流行的弹性包,它实现了恢复策略,如带回退的重试,断路器等。本文介绍Cadru。Polly,包含处理几个SQL Server瞬态错误的策略。您可以直接使用它,也可以处理那篇文章中描述的临时错误编号:

40501、49920、49919、49918、41839、41325、41305、41302、41301、40613、40197、10936、10929、10928、10060、10054、10053、4221、4060、12015、233、121、64、20
异常处理策略 已处理错误
SqlServerTransientExceptionHandlingStrategy
SqlServerTransientTransactionExceptionHandlingStrategy 40549年,40550年
SqlServerTimeoutExceptionHandlingStrategy 2
NetworkConnectivityExceptionHandlingStrategy 11001

相关内容

  • 没有找到相关文章

最新更新