我正在构建一个SSIS软件包以将数据从BMC Remedy数据库(通过AR系统ODBC驱动程序)提取到我的SQL Server数据库中的表中。请注意,处理此数据源时存在一些特殊的限制。ssis dt_text列导致软件包挂起
我遇到的问题是我需要拉入的一列显示为dt_ntext(Unicode文本流)。该字段的数据类型(在TOAD中查看时)是“longvarchar”。该字段可以包含数千个字符的字符串。
只要省略这一列,我可以将所有其他字段导入到我的SQL Server表中。如果我包括这个,那么包无限期地挂起(在BIDS和在服务器上的生产中)。我已经让它运行了超过12个小时,并且从未取得任何进展。没有这一列,它需要一分钟。在BIDS中,我可以看到它挂在数据流任务的“源”步骤上,“执行阶段开始”。它挂在那里,不管目的地是什么(相同的结果转储到文本文件)。
我不需要来自该字段的所有数据。前200个字符实际上就足够了。但是,我没有选择更改我的源SQL语句,因为没有函数(即子字符串)允许(上述限制之一)。我试着在源文件上打开高级编辑器,并将该列的输出属性更改为长度为200的Unicode字符串。它不会导致错误,但结果是相同的(挂起)。我认为这意味着数据仍然需要“引入”,然后截断为200,这对我没有好处。
数据不是那么大......我可以在TOAD中运行查询,并在一分钟内返回所有行,而不会冒烟从我的机器中流出。因此,我觉得这是某种SSIS优化问题。
我看到它的方式,我需要两件事情之一。 1)在数据进入内存之前截断数据(在我的SELECT语句中不这样做),或者2)对我的包进行一些配置更改(缓冲区大小/行?),以便它可以运行在合理的数量的时间。我不知道如何实现这些。任何指导将不胜感激。
感谢, 埃里克
是否有可能用脚本任务替换源代码?通过代码接近领域可能会让您更好地控制发生的事情。 – Greenspark
如,在代码中创建一个记录集,然后遍历并将每个追加到我的数据库?这可能会奏效,但不知道效率如何。我会调查.. –
没有太多的运气与此。我循环遍历记录集,并且当我到达特定行中有问题的字段(Work_Log)时,任何尝试读取数据都会导致代码挂起。例如: strTemp = Mid(dr(“Work_Log”),1,100) –