在xmltable中插入时挂起过程

Hanging process when inserting in xmltable

我正在使用 Oracle 数据库 12c(12.1.0.1.0 64 位)。前段时间在pl/sql写了一个软件,可以导入几个XML的文件。这似乎工作得很好,但随后出现了一些问题。有些文件的大小为 5 到 25 MB,因此导入它们需要一到两分钟的时间。但是对于某些文件,导入永远不会结束,甚至无法停止导入过程,我必须重新启动服务器才能摆脱它。

我将问题追溯到下一行:

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

table SB_BUFFER_XML 的类型是 xmltable 并且 XMLDATA 指向本地目录。该命令永远不会以文件 840.xml 结束。但它以文件 613.xml 结束。两者大小差不多,613.xml更大:

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

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

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

你知道是什么导致了这个问题,或者我接下来要检查什么吗?

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';

虽然错误标题没有描述我们的问题,但解决方法对我们来说仍然有效。