使用C#和Oracle Data Provider for .NET(ODP)我对数据库进行了长时间查询,然后使用TOAD结束服务器端的连接。之后,对数据库的后续调用,甚至创建新的OracleConnection对象,都会抛出以下错误:
ORA-01012: not logged on
Process ID: xxx
Session ID: yyy Serial number: zzz
其中进程ID和会话ID是我用来结束连接的标识符。
似乎当我在服务器端结束与Oracle数据库的连接时,断开的连接将返回到连接池。当C#客户端代码(使用ODP)打开新连接时,可能会检索返回到连接池的断开连接。
有关如何解决此问题的任何想法?
BTW我正在使用Oracle客户端10
答案 0 :(得分:5)
我通过将连接字符串中的“Validate Connection”属性设置为true来解决我的问题。
您可以阅读更多here
作为警告,我引用了Oracle文档。
Validate Connection属性验证来自的连接 游泳池。只有在绝对必要时才应使用此属性 因为它导致服务器往返数据库以验证每个 连接在提供给应用程序之前。如果无效 连接不常见,开发人员可以创建自己的事件 处理程序以检索新连接,而不是使用Validate 连接。这通常会提供更好的性能。