首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启用数据库后C# .net核心重新连接到Oracle

启用数据库后C# .net核心重新连接到Oracle
EN

Stack Overflow用户
提问于 2018-07-02 09:56:54
回答 1查看 1.3K关注 0票数 2

问题是如何在故障后重新连接数据库Oracle

我有.net核心web项目在码头,在那里我连接到Oracle数据库。为了连接,我使用了nugget包oracleClientCore

我是如何连接和调用临时程序的:

代码语言:javascript
复制
string cs = "Data Source = 172.10.200.100:1521/dev;PERSIST SECURITY INFO=True;USER ID=test; Password=devtest;";
using (OracleConnection connection = new OracleConnection(cs)){
  connection.Open();
  using (OracleCommand cmd = connection.CreateCommand()) {
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "sp_check_db";
    cmd.ExecuteNonQuery();
    connection.Close();
  }
}

在存储过程中,sp_check_db只是使insert into table

有时,到数据库的连接崩溃了,我得到了异常ORA-03114: not connected to ORACLE。在再次启用数据库之后,我将继续接收相同的错误ORA-03114: not connected to ORACLE,直到重新构建和重新部署项目为止。

在这种情况下,我能做什么,这是不对的行为?我的代码或连接字符串有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-02 10:39:31

当应用程序依赖于外部集成(在本例中是db)时,由于修补程序、网络故障等原因,在较短的时间内无法访问,则适合实现重试策略。重试逻辑将取决于您如何配置它,在特定异常发生时重新运行代码一定的时间。

下面是一个示例,说明如何使用框架波莉实现简单的重试逻辑,如果包含ORA-03114的异常,它将在10秒内重新运行代码三次。如果代码在第三次之后仍然抛出相同的异常,那么异常将抛出。

代码语言:javascript
复制
var retryTimes = 3;
var waitBetweenExceptions = TimeSpan.FromSeconds(10);

var retryPolicy = Policy
    .Handle<OracleException>(e => e.Message.Contains("ORA-03114"))
    .WaitAndRetry(retryTimes, i => waitBetweenExceptions);

await retryPolicy.Execute(() =>
{
    string cs = "Data Source = 172.10.200.100:1521/dev;PERSIST SECURITY INFO=True;USER ID=test; Password=devtest;";
    using (OracleConnection connection = new OracleConnection(cs)){
      connection.Open();
      using (OracleCommand cmd = connection.CreateCommand()) 
      {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "sp_check_db";
        cmd.ExecuteNonQuery();
        connection.Close();
      }
    }
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51133494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档