【问题标题】:SSIS Consolidate huge amount of data - suggestionSSIS Consolidate 海量数据 - 建议
【发布时间】:2011-08-23 06:51:40
【问题描述】:

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

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

编辑:

我就是这样做的……这是控制流的屏幕截图:

数据流截图:

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

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

有什么建议吗?

【问题讨论】:

  • 完全一样的结构,每天执行一次。

标签: architecture ssis workflow ssis-data-flow


【解决方案1】:

如果您打算在 SSIS 中执行此操作,我会建议您这样做。

  1. 假设您有表 ABC ...、R , S, T 在数据库 DB1, DB2 ... DB30。还有您在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 Replication。你需要一个两步的过程。使用 SQL 作业截断 MainDB 中的数据,然后在数据库之间同步数据。

  2. 使用RedgateIdera等商业产品

希望能给你一个想法。

【讨论】:

  • "创建一个 SSIS 包,它将在数据库 DB1 和 MainDB 之间同步 20 个表。" - 你所说的“同步”到底是什么意思?我不明白这一步。感谢您的回答!
  • 我已经编辑了我的问题...问题出在内存中,显然这种方法试图处理太多数据。感谢您的帮助!
  • 这个答案中缺少一些细节,以便初学者可以理解......这是我最后得出的结论:1)这是我在数据中使用的方法插入/更新/删除记录的流任务:stackoverflow.com/questions/7254079/ssis-delete-rows 2)使用 FOREACH 循环:stackoverflow.com/questions/7347284/… 3)如果遇到内存问题,这可能是解决方案之一:stackoverflow.com/questions/7393027/…
猜你喜欢
  • 1970-01-01
  • 2011-09-20
  • 2012-09-30
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
相关资源
最近更新 更多