SQL提取XML的Clob导致Oracle 10g数据库,以冻结

问题描述:

我需要帮助搞清楚为什么我的数据库服务器崩溃时,我执行以下查询:SQL提取XML的Clob导致Oracle 10g数据库,以冻结

SELECT T.COLLECTION_ID, T.CYCLE_ID, T.PHASE_ID, EXTRACT(T.XML_DOCUMENT, '/') 
FROM THINGS T 
WHERE T.COLLECTION_ID = 1668 AND T.CYCLE_ID = 26601 AND T.DELETED = 0 
ORDER BY T.COLLECTION_ID, T.CYCLE_ID, T.PHASE_ID 

其他细节:

  • 的CLOB在此记录的上述XML_DOCUMENT列中是780kb
  • 数据库是Oracle 10g
  • CLOB中的XML格式正确

如果在上面的PLSQL中没有什么明显的可以改变以避免数据库冻结,没有人有任何想法如何/如果我可以调整我的服务器或数据库,以避免这些类型的查询崩溃一般?

任何潜在的解决方案或建议非常重视,谢谢!

+0

你真的是指死机或某种ORA-XXXXX错误 – 2012-07-18 00:19:35

+0

崩溃。因此,崩溃后对数据库的其他调用会得到以下错误: ORA-12571:TNS:数据包写入器故障和ORA-03135:连接丢失联系。当数据库由我们的数据库管理员关闭时,我们也会得到“ORA-01089:即时关机正在进行 - 不允许任何操作”,但这对于这个问题是多余的。 – fuzzyanalysis 2012-07-18 00:27:25

+0

与您处理的其他文档相比,此XML文档是否异常复杂?您能否将XML文档解压缩为文本并尝试通过其他XML解析器解析它?也许这个文档的格式不正确,导致它无法处理。 – 2012-07-18 01:18:25

升级到Oracle 11g解决了我们的问题。 11g比10g更有效地处理XML操作,并且更好地处理故障。

Another person on Oracle forums使用不同的XML操作得出了类似的结论,所以假设升级是适当的解决方案可能是安全的。

您(或您的DBA)需要查看警报日志和跟踪文件以了解正在发生的事情的详细信息。任何灾难性的Oracle错误应为写入崩溃进程的跟踪文件。

还检查你在各级NLS设置/数据库字符集;我曾经遇到过与你的描述有些肤浅相似的情况,我通过改变DB字符集来解决这个问题。

如果另一台机器上的另一个用户(操作系统和数据库用户)尝试相同的查询,会发生什么情况?

让DBA检查块损坏情况。倒出DB块并检查奇数字符。

请让我们知道您找到什么;这对我很有意思。

+0

谢谢,这些都是一些很棒的建议。回答你的问题:在其他机器上远程运行相同语句的其他用户会发生这种情况。 – fuzzyanalysis 2012-07-18 02:16:13

+0

DBA可以与数据库建立双层连接吗?这将有助于确定它是否是通过监听器进行连接的问题。如果在遇到问题之后会发生什么情况,Listener而不是DB重新启动? – Karl 2012-07-18 02:57:38

+0

我们终于明白了。看起来升级到Oracle 11g解决了这个问题...... 11g似乎更好地处理命令。我们将有问题的XML复制到11g进行测试,并得到以下错误:“ArrayOfSelectedRecordLe1818_T”上的IMP错误63 ......最后,DBA能够复制数据,而上面的PLSQL不再导致问题。所以答案是“Oracle 11g更好地处理XML” - 模糊,但答案完全相同。 – fuzzyanalysis 2012-07-19 00:42:13