创建 SSIS 包 - 将数据从 Oracle 复制到 SQL Server

Posted

技术标签:

【中文标题】创建 SSIS 包 - 将数据从 Oracle 复制到 SQL Server【英文标题】:Create a SSIS Package - To Copy data from Oracle to SQL Server 【发布时间】:2012-06-12 06:49:05 【问题描述】:

我想编写一个 SSIS 包,用于将数据从 oracle 复制到 MS Sql 服务器。而且条件是,通过在 SQL 中选择一个表,可以知道哪些数据必须从 oracle 移动到 SQL。基本上 SQL Server 中的 Table1.Column1 必须从 oracle 填充,如果 SQL Server 中的该表中不存在该值。我们在该表中也有公共列值,以将记录映射到 sql server 和 oracle。所以要做到这一点,我计划在 SSIS 包中做到这一点。

谁能详细解释一下如何为上述场景创建一个 SSIS 包。

提前感谢您的帮助。

【问题讨论】:

你使用的是哪个版本的 ssis? 【参考方案1】:

您应该使用 Lookup 来连接 SQL server 和 Oracle 的公共列(相同数据类型),并从 Oracle 中检索在 SQL server 中没有匹配记录的值。

设计

1.使用 SSIS 2005

    拖动一个 OleDB 源并指向您的 Oracle 数据库并选择表。 拖动查找并选择 SQL Server 连接并指向其表。 在列选项卡中加入公共列并在右侧选择您需要检索的列。 单击配置错误输出并为连接列选择重定向行。 拖动 Oledb 命令并将其连接到查找的错误输出。 6.在Oledb命令中写一个insert语句

2.如果您使用的是 SSIS 2008,则无需在查找中配置错误输出。只需将不匹配输出从查找拖到 SQL Server 目标。

【讨论】:

您不需要 OleDbcommnad,您可以使用 oledbdestination。我认为它更容易更快 嗨,Praveen,非常感谢你,它按我的预期工作,它真的帮助了我。我面临的一个问题是,当我从 sql server 和 oracle 映射列时进行查找。其中一列具有不同的数据类型,因此它没有列出必须映射的名为“ID”的列,但我们在 SQL Server 中将 ID 设为 int,而 Oracle 中“ID”的映射列在 varchar 中。那么我该如何映射它。 另外我想澄清一下查找功能是否会像这样工作,当我们第一次运行它时,它会将所有数据从 oracle 带到 sql,因为 sql 中没有数据。第二次运行它时,从 oracle 中只需要带上 sql 中不存在的数据。这就是查找字段的工作方式。请确认。谢谢。 您在 sql 和 oracle 中的列使用什么数据类型?如果数据类型不匹配,那么您可以使用数据转换转换将 oracle 数据类型转换为 sql server 数据类型 关于查找功能,当 sql server 中没有数据并且您第一次运行它时,来自 oracle 的所有数据将是插入到 sql server 中,因为 2 个表之间没有匹配的数据 @BadriPrasad:当你第二次运行它时,它只会插入数据如果它不存在于 sql server 中。【参考方案2】:

我建议this 实施。

我使用了 praveen 的解决方案,但有时它可能不是最好的。特别是当目标上的记录增加时的数量。此外,它不处理“更新”

【讨论】:

您好,感谢您的回答。我想知道以下是否可行,如果可以,请详细解释。谢谢。在 SQL 中,我们有 Table1,其中包含许多 Oracle 服务器连接详细信息。我们要做的是,我们需要将数据从 Oracle.Table5 复制到 SQl.Table5。条件在 SQL.Table5 中,我知道工厂名称,使用工厂名称我可以在 SQL.Table1 中获取 Oracle 服务器详细信息。所以使用这个细节我需要连接到 oracle 并获取匹配的数据,然后在 Sql.Table5 中更新。这在 SSIS 包中可行吗? @Diego 我浏览了 Andy 的博客。这是将数据加载到 sql server 的最佳实现。他的附加拆分转换与我发布的解决方案有所不同。我可以使用临时表来使用 Oledb 目的地填充更新的数据,然后在控制流中使用执行 sql 任务将其加载到目标表中。这样我可以通过避免逐行更新来获得更好的性能(在安迪的博客中使用 Oledb 命令完成)并使用 Execute SQL Task 执行批处理操作

以上是关于创建 SSIS 包 - 将数据从 Oracle 复制到 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

带有数值的 SSIS 查找不起作用

我们可以在 SQL Server 中使用 Attunity oracle 连接部署 SSIS 吗?

更改 SSIS 中数据类型的大小默认值

从SQL Server代理作业步骤调用时,SSIS包不会运行

动态 SSIS 包将 N 个表从 Oracle 加载到 SQL

使用 ssis 从 SQL Server 表复制到 Oracle 11g