从Oracle11G中加载大表+数据到SQL Server 2012中的最有效方法(我有一个链接服务器的设置)。

问题描述 投票:0回答:1

我有两个数据库,一个是SQL Server 2012,另一个是Oracle 11G数据库。

我需要将一张有1亿条记录的大表从Oracle复制到SQL Server数据库中。

如何将这1亿条记录复制到SQL服务器中,最有效的方法是什么?

我的SQL Server中有一个链接服务器的设置,它是指向Oracle数据库的。

sql-server oracle etl data-migration
1个回答
0
投票

在规划数据移动之前,你可以考虑以下事情。

  1. 用正确的数据类型定义CREATE TABLE,这样你将避免IO问题,加载数据。定义最小的数据类型,以满足你的需求。在ORACLE端进行数据剖析,决定如何定义列,列的最大长度是多少,ORACLE端实际使用的是什么,例如,如果列是年龄,那么用tinyint就够了(支持1-255)。

  2. 目标SQL Server表不应该启用任何PK或FK约束。在加载数据之前,先禁用所有的约束条件。你也可以考虑放弃并重新创建PK、FK。

  3. 目标SQL Server表不应该启用任何索引。在加载数据之前,禁用所有的索引。你也可以考虑放弃和重新创建索引。
  4. 分批进行插入。有一个巨大的INSERT语句作为一个单一的批次,可能会失败,由于许多原因。网络突然出现问题,突然大量写入日志,突然增加内存占用等。如果你在ORACLE中有时间戳列或唯一标识符列,应用过滤器,分批获取数据。让@Id成为可配置的。
DECLARE Id INTEGER

SELECT * FROM OracleTable WHERE Id < 1000000 -- first batch
SELECT * FROM oracleTable WHERE Id > 1000000 AND Id < 2000000
  1. 尽量使用64位的ORACLE驱动来连接服务器。与32位驱动程序相比,它们会提供更好的性能。Oracle 64位驱动链接服务器

  2. 将此操作安排在不太碍事的时间进行,以获得更多的SQL Server端可用资源。

  3. 在进行全面的操作之前,先用少量的数据进行小规模的测试,检查是否一切正常,以避免间歇性的问题。

  4. 看看你是否在SQL Server端启用了并行,以利用并行插入的优势。最大并行度

© www.soinside.com 2019 - 2024. All rights reserved.