我们的 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 背后的原因可能是什么?
我知道这个问题已经有一年了,但我们刚刚遇到了同样的问题。我们所有与 Oracle 相关的对象都已关闭并处置,但游标仍然泄漏。
问题似乎在于 ODP.Net 如何使用连接池。连接池默认处于打开状态,在我们的环境中,这似乎始终会导致游标泄漏,这种情况会反复发生,直到数据库决定足够了并拒绝再授予。
解决方法是在连接字符串中禁用连接池,如下所示:
Data Source=myOracle;User Id=myUsername;Password=myPassword;Pooling=False;
Run Code Online (Sandbox Code Playgroud)
我们的应用程序在启动时使用了 30 多个游标,并稳步增加到 200 个。现在连接池已禁用,它使用 2 到 3 个游标。