SSIS-超大文件(500MB)失败,出现内存不足异常

时间:2018-08-24 13:15:15

标签: sql-server xml ssis

我有一个SSIS封装,可将数据从非标准XML文件加载到具有xml数据类型列的数据库表中。我称其为非标准文件,因为它具有一些无效字符(如制表符),我使用脚本任务将其删除,并且其中具有层次结构标记,可以为某些键而不是其他键提供该标记。我曾尝试使用XSLT,但由于所有属性(标签)在SSIS XML源中显示为单独的输出,而不是单独的输出,因此它不起作用。因此,我将整个XML文件作为一列读取,将一行作为平面文件读取。加载小文件(最大8 Mb)时,该程序运行良好,但当文件很大时,该程序将失败。尝试加载500 MB文件时,脚本任务由于OutOfMemory错误而失败。因此,文件以较小的块发送。现在,脚本任务可以处理90 MB的文件,但是在DFT中失败,因为SSIS仅读取XML的一部分,而不是整个文件,因此DFT在目标位置失败。我分别将10000行和10 MB的默认值分别从MaxbufferRows调整为1,将DefaultBufferSize调整为100 MB。我发现平面文件源正在读取8193 KB数据(8388609个字符)。

请咨询。

注意:我正在从Citrix运行SSIS软件包。我将整个xml文档存储在一个表中,然后使用.nodes提取要存储在相关阶段表中的相关信息。

1 个答案:

答案 0 :(得分:1)

在脚本任务中,打开StreamReader以逐步处理文件,然后将其流式传输到SQL Server中的nvarchar(max)或XML列中。无需将整个内容加载到SSIS中。

请参见SqlClient Streaming Support

编辑您的问题以包括一个简化的文件,其中包括您需要进行示例时需要进行的转换。