【发布时间】:2012-06-16 20:06:14
【问题描述】:
使用 C# 和 Oracle Data Provider for .NET (ODP) 我对数据库进行了长时间查询,然后使用 TOAD 在服务器端结束连接。之后对数据库的后续调用,甚至新建了OracleConnection对象,都会抛出如下错误:
ORA-01012: not logged on
Process ID: xxx
Session ID: yyy Serial number: zzz
其中 Process ID 和 Session ID 是我用来结束连接的标识符。
似乎当我在服务器端结束与 Oracle 数据库的连接时,断开的连接会返回到连接池。并且当 C# 客户端代码(使用 ODP)打开新连接时,可能会检索返回到连接池的断开连接。
关于如何解决此行为的任何想法?
顺便说一句,我使用的是 Oracle 客户端 10
【问题讨论】:
-
为什么要终止 TOAD 中的连接?为什么不在 C# 中处理关闭?
-
@Limey 所有这一切都是由于应用程序在 OLTP 数据库而不是 OLAP 数据库中进行商务智能查询(我无法更改,至少现在无法更改)。因此,有时尽管过程很长,但用户不会通过应用程序使用“取消选项”,希望系统返回他正在等待的数据,这就是 DBA 终止会话并且应用程序变得无响应的原因。
-
看来您真正的问题是您的查询运行时间过长。您是否考虑过改进它?