从Oracle到SQL Server的数据流任务中源和目标的动态列映射

时间:2019-07-12 10:33:18

标签: sql-server oracle ssis etl data-migration

我们在Oracle中大约有5000个表,而在SQL Server中也存在同样的5000个表。每个表的列经常变化,但是在任何时候,源列和目标列将始终相同。创建5000个数据流任务非常麻烦。此外,每次表定义更改时(例如添加或删除列时),都需要进行映射。

尝试了SSMA(Oracle的SQL Server迁移协助),但是传输大量数据然后转移到SSIS的速度非常慢

我在SSIS中采用了以下方法:

  1. 我创建了一个临时表,其中将有一个表名,源 查询(oracle),目标查询(SQL Server)在Execute中使用了该表 SQL任务并将结果集存储为完整结果集

  2. 为每个执行SQL任务结果集的循环容器创建
  3. 以及对象和3个变量的表名,源查询和 目的地查询

  4. 在数据流任务源中,我为oracle选择了OLE DB源 连接,然后从 变量(从循环映射变量传递源查询)

  5. 在数据流任务目标中,我选择了SQL的OLE DB源 连接,然后从 变量(通过循环映射变量传递目标查询)

并为所有5000个表循环它。.它不起作用,能否请您指导我们如何使用SSIS从oracle到SQL Server为5000个表动态创建它。任何示例代码/帮助将不胜感激。预先感谢

1 个答案:

答案 0 :(得分:1)

使用SSIS时,在考虑动态源或目标时,必须考虑到唯一可行的方法是在运行时正确定义元数据。就您而言:

  

每个表列经常变化,但是在任何时候,源目标列将始终相同。

您必须考虑以编程方式构建软件包,而不是遍历表。

是的,如果可以根据表的元数据(列名,数据类型...)将表分类为组,则可以使用循环。然后,您可以为每个组创建一个程序包。

如果您熟悉C#,则可以动态导入表而无需SSIS。您可以参考以下项目,以了解有关从oracle读取并使用C#导入到SQL的更多信息:


我将提供一些链接,您可以参考这些链接,以获取有关以编程方式创建包和动态列映射的更多信息: