2016-07-29 90 views
0

我有一个Oracle数据仓库,其中包含大量的数据(大约1100万行),并希望每天将这些数据提取到SQL Server数据库。从Oracle数据仓库导入数据到SQL Server通过SSIS 2008

SSIS Package

我创建了一个包,使用渐变维度但它是每秒处理大约600行从Oracle数据导入到SQL Server。

我需要我的软件包只是插入新记录而不更新或对旧记录做任何事情,因为数据很大。

有什么办法可以快速处理任何其他数据流项目?

+0

我们对SSIS使用Attunity Oracle连接器而不是标准OleDb。尝试使用它们并查看性能是否提高:https://www.microsoft.com/en-us/download/details.aspx?id = 44582 – vercelli

+0

此外,也许你应该在MSSQL目标表上尝试'lookup'并将没有匹配的行重定向到目标表 – vercelli

+0

或者您可以将所有行从Oracle复制到MSSQL中的Staging表并从该临时表插入。 – vercelli

回答

0

您可以尝试在SSIS中使用合并连接,这应该允许仅插入新记录的比较。另外,我不喜欢在确定什么数据插入时使用日期时间,但我想这取决于您的源数据。听起来好像Oracle源数据没有顺序标识字段?如果有的话,我会结合使用该日期和时间来确定要插入的数据。这可以在SQL或SSIS中完成。

+0

是的,我有一个关键列,这是一个主键和唯一的,请提供一些步骤 –

0

在你的情况下,600/sec也不算太差。 如果假设这1千一百万只在一年内收集。这意味着新记录的数量每天只有3万个。这大约需要1分钟。

最大的问题是确定要插入的记录。
如果必须有时间戳或顺序标识来标识最新插入的记录。

如果您的ID不是连续的,您可以尝试从Oracle表中提取SSIS ONLY ID字段,并将其与现有数据集进行比较,然后仅从Oracle请求最新记录。

如果您没有这些字段,可以提取所有1100万条记录,然后在两边生成哈希值并比较这些哈希值以知道要插入的新增值。

+0

我在源端提交了一个时间戳记,所以在初始加载后,我是否需要编写查询来提取特定数据? –

+0

每次要上传数据时,都必须提取MAX时间戳值,然后只提取旧的新值之间的记录。然后存储下一次的新值。 –

相关问题