大家好,我目前正在使用Oracle11.2XE,并试图在处理大型xml文件时做一些性能测试。到目前为止,我还没有走得很远,希望你能帮我一点忙。
我的目标是在数据库中高效地将大型xml文档从一种xml格式转换为另一种xml格式,因此我把希望寄托在XMLType二进制和XMLType对象关系数据类型上,这些数据类型应该进行性能优化,因为Oracle说他们在大多数情况下不需要DOM解析来计算XPath表达式。
第一个问题是我不能为OR XMLTYPE注册我的复杂模式。在一个小时的注册时间之后,它会中断,并在大约1.3 GB内存分配时出现内存不足错误。模式已经被分解成3个文件,触发out of mem错误的文件只有80kb大。我该怎么处理呢?通过包含进一步细分更多连接的架构文件?
第二个问题是我不能让XMLTransform工作。我在用
Insert into OUTPUT_BINARY SELECT a.filename, XMLtransform( a.xml, b.stylesheet )
FROM XMLTYPE_BINARY a, stylesheets b
WHERE (a.filename = 'test.xml' and b.filename = 'stylesheet.xsl');表XMLTYPE_BINARY和OUTPUT_BINARY的位置
create table XMLTYPE_BINARY (filename varchar2(50), xml XMLTYPE)
XMLTYPE Column xml store as BINARY XML即使对于一个100KB的文档,它也需要永远转换(我在30分钟时终止,不知道它是否会结束),当我尝试处理5MB的文档时,它给我一个ORA-24331:用户缓冲区太小。有没有人能给我一个提示,我错过了什么?
发布于 2012-08-09 19:14:28
我认为这可能是XE版本的一个限制,但在Oracle 11gR2上是一样的。我尝试了dbms_xslprocessor而不是XMLTYPE的XMLTransform,我通过XMLINDEX对二进制XMLTYPE列进行了索引,但它仍然需要花费太长的时间来处理,一个超过10分钟的100KB文件(从未见过一个完成,总是过早终止)。
我已经在数据库之外的java应用程序中使用XDK解析器和处理器转换了相同的文档,可以达到很好的效果。那么为什么db中的解析器和转换器工作得如此之差呢?
https://stackoverflow.com/questions/11795931
复制相似问题