在xmltable中插入时挂起进程

时间:2016-09-23 14:10:22

标签: oracle plsql xmltype xmltable

我正在使用Oracle Database 12c(12.1.0.1.0 64Bit)。前段时间我在pl / sql中编写了一个软件来导入几个XML文件。这看起来效果很好,但后来出现了一些问题。有些文件的大小为5到25 MB,因此导入它们需要一到两分钟。但对于某些文件,导入永远不会结束,导入过程甚至无法停止,我必须重新启动服务器以摆脱它。

我将问题追溯到下一行:

INSERT INTO SB_BUFFER_XML VALUES (XMLType(bfilename('XMLDATA', '840.xml'), nls_charset_id('AL32UTF8')));

表SB_BUFFER_XML的类型为xmltable,XMLDATA指向本地的directoy。该命令永远不会完成文件840.xml。但它完成了文件613.xml。两者的大小相似,613.xml甚至更大:

  • 840.xml:6.329 KB
  • 613.xml:6.905 KB

所以我开始比较两个寻找问题的文件:

  • 这两个文件都是UTF-8,没有BOM
  • 都包含相同的结构,但数据不同
  • xml-syntax检查已成功完成
  • 即使在十六进制编辑器中,两个文件都以相同的字符开头和结尾(因此没有隐藏的BOM或其他内容)
  • 两个文件都是在同一版本的同一系统中创建的

所以我开始删除840.xml中的内容以降低复杂性,我发现删除的内容并不重要。一旦我删除了特定数量的数据,即使它是评论,这个文件的导入也能完美无瑕。

奇怪的是,我已经从同一系统导入了xml文件,文件大小超过20 MB。

您是否知道可能导致此问题的原因或我接下来可以检查的内容?

1 个答案:

答案 0 :(得分:0)

Oracle可以重现我们的问题并向我们指出以下错误:

Bug 22843562 - IMPORT OF A XML FILE WITH A COMMENT AT THE END FAILS WITH ORA-27163

此错误已在12.2中修复。在12.1中,您可以尝试此解决方法来激活旧解析器:

ALTER SESSION SET EVENTS '31156 trace name context forever, level 0x400';

虽然错误标题没有描述我们的问题,但解决方法仍适用于我们。