0

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

目前我看到的唯一解决方案是创建 20 个包。每个包将有 30 个数据流。每个数据流只能从一个数据库中获取数据。但是话又说回来,我不知道执行顺序是什么?一个包的数据流是同时开始执行还是一个接一个地执行?

编辑:

我就是这样做的……这是控制流的屏幕截图: 在此处输入图像描述

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

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

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

有什么建议么?

4

1 回答 1

2

如果您打算在 SSIS 中执行此操作,这是我的建议。

  1. 假设您在数据库DB1DB2 ... DB30中有表ABC ...、RST。还有您在MainDB中的整合数据库。

  2. 创建一个包含 1 个或多个数据流任务的 SSIS 包,以将数据从数据库DB1中的表传输到数据库MainDB中的表。为此,您可以使用 OLEDB Source 从 DB1 检索数据。如果您必须应用一些转换,您可以通过适当的转换任务来做到这一点。要将数据插入目标表,您可以使用 OLE DB 目标。

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

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

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

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

Other options are

  1. 使用SQL Server 复制。你需要一个两步的过程。使用 SQL 作业截断 MainDB 中的数据,然后在数据库之间同步数据。

  2. 使用RedgateIdera等商业产品

希望能给你一个想法。

于 2011-08-23T07:55:52.827 回答