我需要将一个大型SQL表从本地实例推送到SQL Azure。传输是一种简单的“干净”上传--只需将数据推送到一个新的空表中。
该表非常大(大约1亿行),只包含GUID和其他简单类型(没有时间戳或其他任何类型)。
我在SSMS中使用Data Import / Export Wizard创建SSIS包。这个包运行得很好。
问题是当包在缓慢或间歇性连接上运行时。如果互联网连接在中途中断,那么就没有办法“恢复”传输。
以可恢复的方式设计SSIS包以上传此数据的最佳方法是什么?即在连接失败的情况下,或者允许作业仅在特定的时间窗口之间运行。
发布于 2012-01-11 22:58:51
通常,在这种情况下,我会将包设计为枚举大小为N的批(1k行,10M行,等等),并将最后成功传输的批处理记录到一个处理表中。但是,使用GUID时,您不能将它们完全划分为存储桶。
在这种情况下,我会修改数据流,使其看起来像源->查找->目的地。在您的查找转换中,查询Azure端并仅检索密钥(从myTable中选择myGuid )。在这里,我们只对在查找记录集中没有匹配的行感兴趣,因为这些是等待传输的行。
假设Azure端被完全填充,一个完整的缓存将花费大约1.5 to (100M *16字节)的内存,外加相关的数据传输成本。这将比截断和重新传输所有数据的成本更低,但只想确保我调用了它。
发布于 2012-01-11 23:36:39
上传时只需按GUID排序即可。并确保您使用来自Azure的最大(Guid)作为从故障恢复或重新启动时的起点。
https://stackoverflow.com/questions/8807940
复制相似问题