【问题标题】:Import data from Oracle datawarehouse to SQL Server via SSIS 2008通过 SSIS 2008 将数据从 Oracle 数据仓库导入 SQL Server
【发布时间】:2016-12-04 09:27:33
【问题描述】:

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

SSIS Package

我创建了一个包,用于使用缓慢变化的维度将数据从 Oracle 导入 SQL Server,但它每秒处理大约 600 行。

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

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

【问题讨论】:

  • 我们为 SSIS 使用 Attunity Oracle 连接器而不是标准的 OleDb。试试它们,看看性能是否有所提高:microsoft.com/en-us/download/details.aspx?id=44582
  • 另外,也许你应该在 MSSQL 目标表上尝试 lookup 并将不匹配的行重定向到目标表
  • 或者您可以将所有行从 Oracle 复制到 MSSQL 中的暂存表中,然后从该暂存表中插入。
  • @vercelli 我尝试使用查找,但它给出了一些错误,例如无法从数据源检索代码页信息......我已将默认代码页属性更改为 true,但它仍然显示错误。
  • ok 会试试看。如果出现任何错误,请及时通知您

标签: sql-server oracle sql-server-2008 ssis


【解决方案1】:

您可以尝试在 SSIS 中使用合并连接,这应该允许在仅插入新记录的情况下进行比较。另外,我不喜欢在确定插入和不插入哪些数据时仅使用日期时间,我想这取决于您的源数据。听起来 Oracle 源数据没有顺序 ID 字段?如果有,我会结合使用它和日期时间来插入哪些数据。这可以在 SQL 或 SSIS 中完成。

【讨论】:

  • 是的,我有一个主键且唯一的键列,请提供一些步骤
【解决方案2】:

600/sec 在您的情况下还不错。 如果假设这 1100 万只在 1 年内收集。这意味着每天的新记录数量仅为 30K。运行大约需要 1 分钟。

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

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

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

【讨论】:

  • 我在源端有一个时间戳,所以在初始加载后我是否需要编写查询来提取特定数据?
  • 每次上传数据时都必须提取 MAX 时间戳值,然后只提取旧值和新值之间的记录。然后存储下一次的新值。
猜你喜欢
  • 2018-06-30
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
相关资源
最近更新 更多