如何比较两个不同数据库的数据?

时间:2013-04-29 13:22:34

标签: java database

我正在努力为我的问题找到解决方案。问题陈述

  1. 我有两个不同的DB的Oracle和AS400。两个数据库都具有相同的结构和相同的表(但显然有不同的表名)。
  2. AS400通过互联网进行更新,Oracle通过商店或仓库进行更新。
  3. 每天都会同步数据库,同步后我们需要每天生成一份报告,以确定数据是否有任何差异。
  4. 比较需要双方首先从AS400获取数据并与Oracle DB进行比较,反之亦然。
  5. 我们在这里谈论的是1000万条记录。第一次是整个数据库比较,后续报告只会在更改或新添加到数据库的记录上(这是相当简单和易于注意的),但第一次比较是我们试图实现的
  6. 我知道ETL过程真的会让工作变得简单但是我们没有ETL工具所以试图找到使用Java的解决方案。任何可以帮助我们的建议都非常感激。

    先谢谢。

4 个答案:

答案 0 :(得分:0)

我从未使用它,但Liquibase同时支持DB2和Oracle。

The page that talks about their diff function

答案 1 :(得分:0)

简单的方法是设置两个数据源,从每个商店中获取数据并进行比较。

当然你的记忆会爆炸1000万条记录,所以也许可以尝试分批抓取和比较数据(谨防这样做时发生的更新)

如果使用多线程

,可能会获得进一步的性能提升

答案 2 :(得分:0)

如果您担心初始比较的内存消耗,为什么不考虑使用某种形式的记录数据散列。假设一个合适的主键(例如很长)和SHA-1摘要,这意味着每个记录4 + 20 = 24个字节,或每个数据库大约200 Mb。

答案 3 :(得分:0)

  

每天都会同步数据库,同步后我们需要每天生成一份报告,以了解数据是否有任何差异。

根据同步的完成方式,您可能只能获取输入到Oracle数据库和AS400数据库的每日事务。处理这些日常事务文件比处理整个数据库要快得多。

如果没有每日交易文件,那么这是您的第一步。创建每日交易文件。