ORA-01000: 使用 oracle 即时客户端和 C# 超出了最大打开游标数

ceo*_*dev 6 c# oracle

我们的 C# 应用程序生成 ORA-01000 错误。我们使用的是 ODP.Net,应用程序运行得非常完美,没有任何 ORA-01000 错误。

我们删除了 ODP.Net 并安装了即时客户端(我们现在使用 7 个 dll 文件从 C# 连接到 Oracle,它们是 oci.dll、ociw32.dll、Oracle.DataAccess.dll、orannzsbb11.dll、oraocci11.dll、oraociicus11 .dll 和 OraOps11w.dll)。

从那时起,我们在执行具有多个查询的长进程时得到 ORA-01000。请注意,我们正在关闭/处理 OracleDataReader 对象。

带有即时客户端的 ORA-01000 背后的原因可能是什么?

Nig*_*nes 5

我知道这个问题已经有一年了,但我们刚刚遇到了同样的问题。我们所有与 Oracle 相关的对象都已关闭并处置,但游标仍然泄漏。

问题似乎在于 ODP.Net 如何使用连接池。连接池默认处于打开状态,在我们的环境中,这似乎始终会导致游标泄漏,这种情况会反复发生,直到数据库决定足够了并拒绝再授予。

解决方法是在连接字符串中禁用连接池,如下所示:

Data Source=myOracle;User Id=myUsername;Password=myPassword;Pooling=False;
Run Code Online (Sandbox Code Playgroud)

我们的应用程序在启动时使用了 30 多个游标,并稳步增加到 200 个。现在连接池已禁用,它使用 2 到 3 个游标。


San*_*rer 0

ORA-01000 的唯一原因是打开的游标太多:)

检查V$OPEN_CURSOR视图并查看哪些游标保持打开状态。了解了这一点,您就能够确定它们为何仍处于打开状态。