【问题标题】:"ORA-01012" error message when trying to connect to an Oracle database尝试连接到 Oracle 数据库时出现“ORA-01012”错误消息
【发布时间】: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 终止会话并且应用程序变得无响应的原因。
  • 看来您真正的问题是您的查询运行时间过长。您是否考虑过改进它?

标签: c# oracle10g odp.net


【解决方案1】:

我通过将连接字符串中的“验证连接”属性设置为 true 解决了我的问题。

您可以阅读更多here

作为警告,我引用了 Oracle 文档。

验证连接属性验证来自 游泳池。仅在绝对必要时才应使用此属性 因为它会导致服务器往返于数据库以验证每个 在将其提供给应用程序之前进行连接。如果无效 连接不常见,开发人员可以创建自己的事件 处理程序来检索新连接,而不是使用 Validate 联系。这通常会提供更好的性能。

【讨论】:

  • 谢谢!!! ,工作正常。如果您不介意,请告诉我在连接Validate Connection=true; 时添加string web.config 有什么区别?
猜你喜欢
  • 2020-07-13
  • 2017-08-20
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
相关资源
最近更新 更多