Doctrine + Oracle = 超出最大打开游标 (ORA-01000)

Posted

技术标签:

【中文标题】Doctrine + Oracle = 超出最大打开游标 (ORA-01000)【英文标题】:Doctrine + Oracle = maximum open cursors exceeded (ORA-01000) 【发布时间】:2011-07-12 16:19:37 【问题描述】:

我目前在 Oracle DB 上使用 Doctrine,使用 Doctrine_Adapter_Oracle

我的应用程序处理一些批处理,包括查询和插入/水合大量对象 (~700+)。

这样做时,我从 Oracle 收到一个错误:

ORA-01000: maximum open cursors exceeded 

ORA-04088: error during execution of trigger 'SYSTEM.DOCUMENT_AI_PK' : INSERT INTO (...)

Oracle 允许的最大游标数是 300,这在 IMO 中很多。那么是我遗漏了什么,还是 Doctrine 有什么问题?

经过一番谷歌搜索,我找到了这个Entry on the Doctrine bug tracker: "Oracle don't close cursor"。我尝试了建议的补丁,它似乎有效。但是,我真的不愿意使用它,因为 Jonathan Wage(Doctrine 的负责人)似乎不鼓励它。

我很坚持这个,所以任何帮助将不胜感激。

【问题讨论】:

解决了吗?错误链接现已断开。我遇到了同样的问题,我想知道它是否是教义版本? @Murphpdx 已经有一段时间了:x 我不确定它是否已修复。最好的办法是在 github repo 上开一张票,附上可复制的案例,并向社区寻求帮助。祝你好运 【参考方案1】:

我不认为 Doctrine 有什么问题。遇到此错误时,您有两种选择:

    尽快关闭游标 增加 OPEN_CURSORS

所提供链接中的讨论似乎围绕着在 Doctrine 中修复它的正确方法。

【讨论】:

基本上你是在告诉我增加允许的光标数量,或者修复 Doctrine。我不能只是“尽快关闭游标”,因为它们完全由 Doctrine 管理。 我正在寻找一些关于如何修复 Doctrie 的建议,或者关于修复效果如何的建议。 (抱歉,允许的编辑时间已过期) 除了你可以,用补丁,不是吗?你发的链接不是这么说的吗?您自己说它为您解决了光标问题。东西坏了。我所看到的你的选择就是我列出的。我想这是否值得一票否决,就这样吧。 是的,补丁似乎解决了这个问题,但实际上它跳过了一些 Doctrine 内部逻辑,主要是一些在请求执行前后抛出的事件。恐怕使用补丁我会用另一个意外行为交换。我知道这些选择,我正在寻找建议/我猜是deus ex machina ^^。 这真的不是我心烦意乱的问题。您在这里实际问的一个问题是 Doctrine 是否有问题。海事组织,答案是肯定的。在短期内,也许你可以增加允许的打开游标的数量,但从长远来看,有人需要修复 Doctrine 中的这个错误。这是使用抽象层的风险之一——你会失去对这种情况的控制。对不起,我不能为你把兔子从帽子里拉出来;-)

以上是关于Doctrine + Oracle = 超出最大打开游标 (ORA-01000)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle超出最大连接数问题及解决

求助#oracle数据库超出最大连接数

超出最大打开游标 - Oracle 11g | ibatis 2.3.4 |春天 3.0.3

使用 Oracle 的 Spring Boot 应用程序 - ORA-01000:超出最大打开游标 - 负载测试期间发生错误

如何编写触发器来检查工资是不是超出工资的最小或最大范围pl-sql Oracle

oracle 错误代码大全