2012-06-26 38 views
0

我需要比较来自两个数据库(它们都是DB2)的数据,这些数据库位于不同服务器上,而且它们之间没有现有连接。因为这两个数据库都在生产中使用,所以我不想重载它们,因此我将在本地机器上创建一个新的数据库(可能是MySQL),从两个DB2中提取数据,插入到MySQL中并在本地执行比较。如何在数据库之间移动大量数据?

我想在Java中这样做,所以我的问题是如何尽可能有效地完成这项任务,而不会超载生产数据库。我做了一些研究,并与下面弄出点:

  • 限制,我将在我最初的SELECT语句中使用
  • 调列数的获取ResultSet对象的大小(默认为IBM DB2 JCC驱动程序似乎是64)
  • 利用PreparedStatement对象的预编译SQL

还有什么我可以做,或其他任何建议吗?

谢谢

+1

在生产灯使用期间安排数据库副本。 –

+0

您的目标是确定两个数据库(或表)之间的行级别差异吗?另外,运行的生产系统是什么样的操作系统? – NealB

+0

@GilbertLeBlanc @GilbertLeBlanc应该已经添加到列表中,肯定不会在高峰使用时间内完成它,谢谢 – soulfly1983

回答

2

DB2 for Linux UNIX和Windows将EXPORT实用程序作为其运行时客户端的一部分。可以将此实用程序指向z/OS上的DB2数据库,以便快速将表(或查询结果集)抽取到客户机上的平面文件中。您可以选择flatfile是以分隔符,固定宽度还是DB2专有的IXF格式。您的z/OS DBA应该能够帮助您在工作站上配置客户端,并根据EXPORT实用程序的要求将必要的软件包绑定到z/OS数据库中。

一旦你的客户端上有平面文件,你可以根据自己的喜好来比较它们。

+0

@ user1482510这几乎是我要采取的方法。将表格转储为平面文件,然后使用您可用的任何文件差异工具。你应该可以使用canned db/2和OS实用程序完成整个工作。 – NealB

0

听起来像是一个很好的地图缩小工作(hadoop)。一个工作有两个mapper,每个DB和一个reducer做一个比较。它可以根据需要扩展到尽可能多的处理器,或者只运行在一台机器上。

+0

感谢您的建议,不知道Hadoop项目,这看起来很有趣,但在这种情况下也许会是一种矫枉过正?不知道,但从描述它的情况,当你想做大量的数据计算广泛的分析..在我的情况下,我只是想移动大量的数据,然后将被逐行比较,所以不是这样的一个昂贵的操作 – soulfly1983

+0

,因为你打算使用一台机器,我不认为Hadoop会是一个理想的选择。正如你所说的那样,它适用于处理大型数据集,跨多台机器的集群。 – Tariq

相关问题