仅是出于理论目的而构建的数据传输情况的工具,这对于从SQL Server(2000或更高)(2000或更高)和/或Oracle(10G或更高)的实例传输大量数据可能很有用,以转移到另一个(SQL> SQL> SQL,SQL> oracle,Oracle,Oracle> oracle> SQL和Oracle> Oracle> Oracle> Oracle> Oracle)。
通常,将SQL Server和/或Oracle表从一个实例复制到另一个实例。
通常,我们可能决定使用SSMS导入/导出向导,集成服务软件包或将数据作为文本文件传输的方法。
但是,如果我们谈论具有超过3亿张记录或30GB的表格,如果必须在最短的时间内复制它们,则可能会出现问题。
如果幸运的话,此表可能在SQL Server中具有群集索引或带有Oracle频率直方图的索引。这就是这个小项目发挥作用的情况。
如果我们在源表上没有聚类的索引,那么我们就有一些希望,我们实现了一种新方法(比聚类速度慢一些,是一个好的方法),以从Oracle和SQL Server中的堆表复制数据。
它的逻辑非常简单:它在SQL Server或Oracle中的直方图扫描索引统计,并定义数据的平衡簇。
这意味着它可以创建与螺纹与参数化一样多的查询,并且这些查询在群集索引字段上过滤器,以便获得每个数据的相同量的数据。然后,它使用odp.net方法的sqlbulkcopy .NET FW或OracleBulkCopy发射它们。作为堆,它具有确定功能的“分区”表和一个模块(SQL Server中的%% lockres %%和Oracle中的ROWID),并以一个线程启动每个查询。
我们必须建议,根据线程的数量,这是一个非常密集的过程,在某些情况下,CPU消耗可能会上升到100%,并且磁盘队列长度可能会导致长时间的等待。
因此,我们建议在数据源和目的地以外的其他服务器上运行。
因此,拥有2个网络的结构,每个服务器中有两张100MBIT网卡,我们达到了190MB/SEG的传输率。
在生产环境中考虑使用它之前,您应该为统计目的进行测试。
附加注意事项:在某些电路下将实现性能增益,有时由于群集列内的数据性质不会被渗透。首先,有必要澄清群集索引仅保存统计信息的统计信息,这是化合物索引的第一列的统计信息,因此,群集索引设计良好变得更加至关重要。我们的意思是,最好遵循从最粒度到少的订购字段的订单尖端。可能遇到的另一个问题是无效数据的数量。统计信息讨论了非零数据,因此,如果表具有80%的空数据,则多线程将无法从中受益,因为所有空数据都在一个线程中复制为唯一批次。自然,我们还建议目标表没有索引(允许多个散装插入线),没有分区,并且不会被压缩以加快插入过程。
该DLL可能会围绕其他不依赖或未建立在SSIS平台上的ETL项目中。