从我读到的:SSIS - OLE DB目的地 - 表或视图加载与快速加载
表或视图数据访问模式一次提交每行作为事务。因此,制作一个传输500万行的包需要很长时间(30分钟以上)。
快速加载数据访问模式允许在插入到目标时指定批处理行和提交大小。例如,插入500万条记录需要2分钟以上。
现在问题出现在加载到DW的SSIS包中的一个使用OLE DB目标中的表或视图数据访问模式。根据我的理解,这是为了将它插入的错误行(错误约束)提取到错误记录表中。因此,我们有一个需要30多分钟的过程。反过来,对于同样的动作,快速加载将花费不到2分钟的时间。
如果我理解正确,快速加载将无法区分哪一行导致批处理中的错误,从而导致批处理完全失败?如果是这样,是否有另一种方法来处理这种情况:带有错误行的批次被错误约束重定向,然后以批量好记录发送到正确目标的方式工作到目的地,同时仍然发送错误记录到错误日志表中?甚至这样做是一个好主意吗?对于需要花费的时间来说,咬一口这种子弹是否更好?
预先感谢您。
我想知道为什么你不做X行的提交,并且如果有错误,不要让组件失败,而是直接将错误行直接重定向到平面文件? - 查看El.HAM的答案 – codeputer
@codeputer我没有让组件失效。我们有相同的答案,只是不同的条款。这个想法是,你试图提交一个大的(高效的)大小,然后削减到较小的部分。削减失败批次的原因是,在那里还有一些好的行,你不想把它们扔掉。您最终指示哪些行(平面文件,表等)基于您的ETL体系结构 – billinkc
我了解有关良好的行,但是如果失败的行已重定向,那么如果没有重定向的行,批处理会失败? – codeputer