我需要整合来自30个数据库和20个表的数据。我的第一次尝试是为每个表创建一个数据流。每个数据流将有30个db源,从每个db中获取1个表中的数据,然后插入1个目标。这不起作用,因为没有足够的内存。我试图过滤数据以忽略不会被使用的数据 - 它没有帮助。这些任务应该每天执行。删除整个合并数据库,然后插入新数据,这意味着每天都会插入大量数据。有人建议如何处理内存问题吗?
我现在看到的唯一解决方案是创建20个包。每个包都有30个数据流。每个数据流只从一个数据库中获取数据。但话说回来,我不知道执行的顺序是什么?一个包的数据流是否会同时开始执行,还是逐个执行?
编辑:
这就是我做的...这里是控制流程的截图:
数据流的屏幕截图:
我为所有数据库中的一个表创建了一个包。在这种情况下,每个数据流从表中获取4年前的数据并导入到源数据库。问题是我在一个数据库中有一个表,它有太多的数据并返回错误:
缓冲区管理器对10484608字节的内存分配调用失败, 但无法换掉任何缓冲剂来缓解记忆压力。 20 缓冲区被考虑,20个被锁定。要么没有足够的记忆 管道可用,因为安装不够,其他 进程正在使用它,或者锁定了太多缓冲区。
有什么建议吗?
答案 0 :(得分:2)
如果您计划在SSIS中执行此操作,以下是我建议的内容。
我们假设您有表 A , B , C ..., R 数据库 DB1 , DB2 ... DB30 中的 S , T 。还有 MainDB 中的整合数据库。
创建一个包含一个或多个数据流任务的SSIS包,以将数据从数据库 DB1 中的表传输到数据库 MainDB 中的表。为此,您可以使用OLEDB源从DB1检索数据。如果必须应用某些转换,则可以使用适当的转换任务执行此操作。要将数据插入目标表,可以使用OLE DB目标。
将连接字符串保存在包配置文件(dtsConfig)
创建30个不同的配置文件,每个文件包含您拥有的30个数据库的连接字符串。
您可以在SQL Server代理下创建30个SQL作业来安排每日运行。
每个SQL作业都将运行相同的SSIS包,但使用相应的配置文件指向正确的数据库。
Other options are
:
使用SQL Server Replication。您需要两个步骤。使用SQL作业截断MainDB中的数据,然后在数据库之间同步数据。
希望能给你一个想法。