sql-server - 比较从 Oracle 到 SQL Server 的数百万条记录

标签 sql-server database oracle ssis

我有一个 Oracle 数据库和一个 SQL Server 数据库。有一个表说 Inventory,它在两个数据库表中都包含数百万行,并且还在不断增长。

我想每天将 Oracle 表数据与 SQL Server 数据进行比较,找出 SQL Server 表中缺少哪些记录。

哪种方法最好?

  1. 创建 SSIS 包。
  2. 创建 Windows 服务。

我想消耗更少的资源来实现这个需要更少时间和资源的功能。

例如:oracle 中有 1800 万条记录,SQL Server 中有 16/17 百万条记录

出现这种两个不同数据库的情况是因为在线和离线两个不同的应用

编辑:如何通过 Oracle 网关将 SQL Server 从 Oracle 连接到 SQL Server 到

1) 第一次从 Oracle 直接查询 SQL Server 以更新 SQL Server 中丢失的记录。

2) 在 Oracle 上创建触发器,当记录从 Oracle 中删除时执行,并将删除的记录插入新的 oracle 表中。

3) 创建SSIS包,将新创建的oracle表映射到SQL服务器,更新SQL服务器记录。这样只有很少的记录需要每天通过SSIS处理。

您如何看待这种方法?

最佳答案

我会创建一个 SSIS 包并使用数据流/OLE DB 数据源从 Oracle 表加载数据。如果您有 SQL Enterprise,Attunity 连接器会更快一些。

然后我会将 SQL Server 表中的键加载到查找转换中,我会在其中匹配键上的 2 个源,并将不匹配的行定向到单独的输出中。

最后,我会将不匹配的行输出定向到 OLE DB 命令,以更新 SQL Server 表。

此 SSIS 包需要大量内存,但由于匹配是在内存中以最少的 IO 完成的,因此它的速度可能会优于其他解决方案。它将需要足够的可用内存来缓存 SQL Server 表中的所有键。

SSIS 的另一个优势是,如果您以后需要,它还有许多其他转换函数可用。

关于sql-server - 比较从 Oracle 到 SQL Server 的数百万条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34805268/

相关文章:

java - 在 Oracle 数据库中调用查询时绑定(bind)后更改参数值

sql-server - 为什么在 Where 子句中使用 Case

php - 排序赞成票和反对票的最合乎逻辑的方式以及如何进行

PHP更新功能不起作用

sql - 选择从查询中检索列名的列

oracle - 在目录中查找文件列表的问题

sql - 使用 golang 和 sqlserver 驱动程序进行参数查询

sql - 相当于 MySQL 的 DESCRIBE [表] 的 Oracle 和/或 SQL Server?

sql-server - 大型数据集是否需要存储过程?

mysql - 根据另一个表中设置的条件更新数据库表?