我有两个数据库,一个是SQL Server 2012,另一个是Oracle 11G数据库。
我需要将一张有1亿条记录的大表从Oracle复制到SQL Server数据库中。
如何将这1亿条记录复制到SQL服务器中,最有效的方法是什么?
我的SQL Server中有一个链接服务器的设置,它是指向Oracle数据库的。
在规划数据移动之前,你可以考虑以下事情。
用正确的数据类型定义CREATE TABLE,这样你将避免IO问题,加载数据。定义最小的数据类型,以满足你的需求。在ORACLE端进行数据剖析,决定如何定义列,列的最大长度是多少,ORACLE端实际使用的是什么,例如,如果列是年龄,那么用tinyint就够了(支持1-255)。
目标SQL Server表不应该启用任何PK或FK约束。在加载数据之前,先禁用所有的约束条件。你也可以考虑放弃并重新创建PK、FK。
DECLARE Id INTEGER
SELECT * FROM OracleTable WHERE Id < 1000000 -- first batch
SELECT * FROM oracleTable WHERE Id > 1000000 AND Id < 2000000
尽量使用64位的ORACLE驱动来连接服务器。与32位驱动程序相比,它们会提供更好的性能。Oracle 64位驱动链接服务器
将此操作安排在不太碍事的时间进行,以获得更多的SQL Server端可用资源。
在进行全面的操作之前,先用少量的数据进行小规模的测试,检查是否一切正常,以避免间歇性的问题。
看看你是否在SQL Server端启用了并行,以利用并行插入的优势。最大并行度