Tridion CMS & Oracle:ORA-01000:超出最大打开游标数



希望有人能在这里帮助我。

我们使用Tridon CMS来管理托管在jBoss和Apache上的网站。

我们已经使用SDL Tridion 5.3 5年了,突然我们在其背后的Oracle数据库中遇到了一个错误。我们的大部分内容都是作为文件系统中的普通jsp页面提供的,但我们有一些组件是通过调用Tridion的Java API提供的,该API返回Oracle数据库中的html片段
最近,我们注意到其中一些html片段没有得到服务,在检查服务器日志文件时,我们发现正在生成Oracle错误ORA-01000:超过最大打开游标
我们的最大游标设置为300,所以我们将其增加到350,看看它是否有帮助,但没有
通过监视活动的Oracle会话,我们可以看到许多会话已达到最大游标,因此我们重新启动了应用程序服务器。这似乎有所帮助,但只是暂时的。达到最大游标阈值的会话数量再次逐渐增加。昨天下午重启后不久,有大约30个会话的最大游标,今天早上是150。

很明显,最近发生了一些变化,但我们不确定是什么原因造成的。Oracle数据库不是我们通常可以访问的,当然也不是我们直接更改的——所有日常数据库操作都是通过Tridion API进行的。就Tridion的开发和出版而言,我们没有做任何不同寻常的事情,所以与过去几年我们在那里所做的没有什么不同。我们网站的流量目前相对较低(过去明显更高),所以我们很确定这没有问题。

有一件事我刚刚被告知,可能是连接的,也可能不是连接的——在问题出现前不久,我们的一个内部防火墙发生了故障,但我们想不出这会导致我们看到的问题。除了防火墙故障切换之外,我们找不到对应用服务器和数据库之间的连接进行任何其他更改。

有人对我们在哪里可以找到解决方案有什么建议吗?我们刚刚向SDL开出了一张支持票,但目前他们和我们一样困惑。

谢谢。

我们过去在使用IBM WebSphere时也遇到过类似的问题。在我们的场景中,问题的根本原因是,由于防火墙上的超时时间低于AppServer连接清理超时时间,因此防火墙超时了空闲或陈旧的连接,并断开了应用程序服务器和数据库之间的连接。

首先检查一下并确保这不是根本原因可能是值得的,我们花了一段时间才弄清楚这一点,因为我们花了很多时间分析应用程序日志和Tridion api等。我认为jBoss有类似于WebSphere的设置。

我们实现的解决方案是将Unused Timeout设置为低于防火墙上的超时设置。这使得WebSphereApplicationServer可以在防火墙丢弃未使用的连接之前清理它们。

我不确定SDL Tridion R5.3,但在2011 SP1上有一个已知的问题,即使用JNDI(我认为与WebSphere结合使用)时,如果ResultSet没有显式关闭,则会打开游标。

解决方案只是按照Oracle文档所述,增加允许的游标数量,或者如果您一直遇到问题,您可能会考虑不使用JNDI。如果可能的话,您可以检查自己的代码以正确关闭ResultSets(根据JavaDoc for ResultSet::这是不必要的,尽管这似乎只有在不使用JNDI时才是正确的;使用JNDI时,似乎会打开光标)。

最新更新