5

使用 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

4

1 回答 1

6

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

你可以在这里阅读更多

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

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

于 2012-06-14T17:33:11.587 回答