Oracle XMLDB使用大文件

时间:2012-08-03 12:40:31

标签: xml transformation oracle11gr2

您好我在使用Oracle 11.2 XE并尝试在处理大型xml文件时进行一些性能测试。到目前为止,我没有走得太远,希望你能帮助我一点点。

我的目标是在数据库中有效地将大型xml文档从一种xml格式转换为另一种xml格式,因此我希望XMLType二进制和XMLType对象关系数据类型应该进行性能优化,因为Oracle表示他们不需要DOM在大多数情况下解析evaluateg XPath表达式。

问题1是我无法获得为OR XMLTYPE注册的复杂模式。注册一个小时后,它会因内存错误而中断,内存分配大约为1.3 GB。架构已经分解为3个文件,触发内存错误的文件只有80kb大。我该怎么处理?通过包括?

进一步细分更多连接的模式文件

问题2是我无法使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:用户缓冲区太小。有人可以给我一个暗示我在这里失踪的东西吗?

1 个答案:

答案 0 :(得分:0)

我认为这可能是XE版本的限制,但在Oracle 11gR2上也是如此。我尝试使用dbms_xslprocessor而不是XMLTYPE的XMLTransform,我通过XMLINDEX索引二进制XMLTYPE列,但它仍然需要很长时间才能处理,在10分钟内处理100 KB文件(从未看到一个完成,总是提前终止)。

我已经使用Java应用程序在数据库外部使用XDK解析器和处理器转换了相同的文档,并且可以获得良好的结果。那么为什么数据库中的解析器和变换器工作得如此糟糕呢?