【问题标题】:Oracle doesn't release or kill inactive process and/or session from my ASP.NET Application poolOracle 不会从我的 ASP.NET 应用程序池中释放或终止非活动进程和/或会话
【发布时间】:2016-07-20 10:04:57
【问题描述】:

我们的网站刚刚遇到问题。我们在 Windows 12 Azure 服务器上运行 Oracle 12c 数据库并使用 IIS 8。 ODP.NET 是我们使用的提供者。该网站使用 C# 构建并作为 64 位 Web 应用程序运行。

无论出于何种原因,Oracle 都没有释放我们的连接,过了一会儿我们得到了一个 Oracle 错误:

ORA-12520: TNS:listener could not find available handler for requested type of server

我们检查了所有的连接字符串,添加:

Min Pool Size=10;Max Pool Size=100;Connection Lifetime=120;Connection Timeout=60;Incr Pool Size=5; Decr Pool Size=2

我们将 Oracle 配置中定义的 MAX Process 和 Sessions 增加了一倍以上。

这有帮助,但只是为了延迟问题。

目前我们所做的是一个批处理文件,它每 10 分钟运行一次,并杀死 30 分钟后仍然存在的所有非活动会话(ALTER SESSION KILL....IMMEDIATE)。

这就是我们所处的位置,我们已启用 ODP.NET 跟踪并等待明天查看,但是到了这个时候,什么会导致这个问题?

【问题讨论】:

  • 您使用的是哪个 .net ADO Oracle 客户端?建立连接的代码是什么样的?写得不好的代码不使用using 块或finally 块在使用后关闭每个连接可能是罪魁祸首。如果没有更多信息,可能没有人可以为您做很多事情。
  • 抱歉,只看我的回答。我正在为其他人记录。

标签: asp.net oracle connection-pooling odp.net application-pool


【解决方案1】:

最后我在 ODP.NET Trace 中发现的是

TID: dac  (ERROR) Oracle error code=28002; Oracle msg=ORA-28002: the password will expire within 6 days

似乎这个错误并没有停止对数据库的访问,而是将会话挂在池中。

在我们解决这个问题后,一切都恢复正常了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-20
    • 2015-09-20
    • 2016-11-30
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多