0

当我执行以下查询时,我需要帮助找出我的数据库服务器崩溃的原因:

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

额外细节:

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

如果上面的 PLSQL 中没有任何明显的内容可以更改以避免冻结数据库,那么是否有人对我如何/是否可以调整我的服务器或数据库以避免这些类型的查询崩溃有任何想法?

任何潜在的解决方案或建议都受到高度重视,谢谢!

4

2 回答 2

1

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

还要检查所有级别的 NLS 设置/DB 字符集;我曾经遇到过与您的描述有些表面相似的情况,我通过更改数据库字符集解决了这种情况。

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

让 DBA 检查块损坏。转储 DB 块并检查奇数字符。

请让我们知道您的发现;这对我来说很有趣。

于 2012-07-18T01:41:44.780 回答
0

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

Oracle 论坛上的另一个人使用不同的 XML 操作得出了类似的结论,因此可以肯定地假设升级是这里的适当解决方案。

于 2012-07-19T00:47:10.353 回答