SSIS整合大量数据 - 建议

时间:2011-08-23 06:51:41

标签: architecture ssis workflow ssis-data-flow

我需要整合来自30个数据库和20个表的数据。我的第一次尝试是为每个表创建一个数据流。每个数据流将有30个db源,从每个db中获取1个表中的数据,然后插入1个目标。这不起作用,因为没有足够的内存。我试图过滤数据以忽略不会被使用的数据 - 它没有帮助。这些任务应该每天执行。删除整个合并数据库,然后插入新数据,这意味着每天都会插入大量数据。有人建议如何处理内存问题吗?

我现在看到的唯一解决方案是创建20个包。每个包都有30个数据流。每个数据流只从一个数据库中获取数据。但话说回来,我不知道执行的顺序是什么?一个包的数据流是否会同时开始执行,还是逐个执行?

编辑:

这就是我做的...这里是控制流程的截图: enter image description here

数据流的屏幕截图: http://img833.imageshack.us/img833/355/45908206.png

我为所有数据库中的一个表创建了一个包。在这种情况下,每个数据流从表中获取4年前的数据并导入到源数据库。问题是我在一个数据库中有一个表,它有太多的数据并返回错误:

  

缓冲区管理器对10484608字节的内存分配调用失败,   但无法换掉任何缓冲剂来缓解记忆压力。 20   缓冲区被考虑,20个被锁定。要么没有足够的记忆   管道可用,因为安装不够,其他   进程正在使用它,或者锁定了太多缓冲区。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果您计划在SSIS中执行此操作,以下是我建议的内容。

  1. 我们假设您有表 A B C ..., R 数据库 DB1 DB2 ... DB30 中的 S T 。还有 MainDB 中的整合数据库。

  2. 创建一个包含一个或多个数据流任务的SSIS包,以将数据从数据库 DB1 中的表传输到数据库 MainDB 中的表。为此,您可以使用OLEDB源从DB1检索数据。如果必须应用某些转换,则可以使用适当的转换任务执行此操作。要将数据插入目标表,可以使用OLE DB目标。

  3. 将连接字符串保存在包配置文件(dtsConfig)

  4. 创建30个不同的配置文件,每个文件包含您拥有的30个数据库的连接字符串。

  5. 您可以在SQL Server代理下创建30个SQL作业来安排每日运行。

  6. 每个SQL作业都将运行相同的SSIS包,但使用相应的配置文件指向正确的数据库。

  7. Other options are

    1. 使用SQL Server Replication。您需要两个步骤。使用SQL作业截断MainDB中的数据,然后在数据库之间同步数据。

    2. 使用RedgateIdera

    3. 等商业产品

      希望能给你一个想法。