SSIS - OLE DB目标 - 表或视图加载与快速加载

时间:2013-01-22 19:29:07

标签: ssis sql-server-2008-r2 data-warehouse

从我读过的内容:

表或视图数据访问模式一次提交每一行作为事务。因此,制作一个包含500万行的包需要很长时间(30多分钟)。

快速加载数据访问模式允许用户在插入目标时指定批量行和提交大小。例如,插入500万条记录只需2分钟。

现在出现的问题是,加载到DW的SSIS包之一在OLE DB目标中使用Table或View数据访问模式。根据我的理解,这是为了获取它插入的错误行(错误约束)到错误记录表中。因此,我们有一个超过30分钟的过程。反过来,对于相同的动作,快速加载将花费不到2分钟。

如果我理解正确,快速加载将无法区分哪一行导致批处理中的错误,而这又导致批处理完全失败?如果是这样,是否有另一种方法来处理这种情况,其中具有错误行的批处理由错误约束重定向,然后以批处理中的良好记录发送到正确的目的地的方式工作到目标,同时仍然发送错误记录到错误日志表中?即使这样做也是个好主意吗?是否更好地咬一口关于它需要多长时间的说话?

提前谢谢。

2 个答案:

答案 0 :(得分:12)

我在那种情况下所看到的是一种连锁失败的方法。尝试在连续较小批量中插入OLE DB目标,以便在启动单例插入之前尝试通过批处理模式获得尽可能多的数据。

假设您的提交大小为10k行(任意数字,根据您的情况进行测试等)。将失败的行重定向到OLE DB目标,仍处于快速加载模式但提交大小为2.5k行。添加另一个ole db目标,提交大小可能为100,然后具有处于RBAR模式的最终目标。然后,您可以识别出失败的行并执行任何需要执行的操作。

答案 1 :(得分:3)

我在Fastload模式下使用了一个目标,我将其错误行重定向到同一DestinationTable的另一个Destination,但是逐行模式。

它没有Row by Row那么慢,也没有Fastload那么快,但它对我有用! 我也有错误描述和真正的错误。