加入DB2和Oracle数据库的最佳实践信息

时间:2009-04-03 13:46:46

标签: java sql oracle db2

我们正在设计一个相当大的棕色地块应用程序,并遇到一些问题。

我们在DB2数据库中从仍在加载数据的遗留应用程序中获得了大量信息。我们还在我们控制的Oracle数据库中提供信息。

我们必须对表执行'JOIN'类型的操作。现在,我正在考虑将信息从DB2表中提取到List<>中。然后将它们迭代到Oracle数据库上的SQL语句中,例如:

select * from accounts where accountnum in (...)

是否有更简单的方法在数据库之间进行交互,或者至少,这种行为的最佳做法是什么?

6 个答案:

答案 0 :(得分:1)

我已经做到了这两种方式。

在不同的盒子上有两个Sybase数据库,我设置了存储过程,然后像函数一样调用来回传送数据。这还允许sprocs进行审核/记录,以说服客户在此过程中没有数据丢失。

在Oracle到Sybase的一种方式中,我使用了一个视图来编组数据,并使用C ++程序调用每个供应商的C库,这些程序为C API提供了一个通用接口。

在MySQL和DB2设置中,就像你的情况一样,Db2是“遗留但现场”,我采用了类似于你所描述的设置:将数据拉入(Java)客户端程序。

如果连接始终是一对一的,并且每个框的结果集具有相同的键,则可以使用相同的顺序将它们拉出,并在客户端中轻松连接它们。即使它们是一对多的,将它们拼接在一起只是两个列表的单向迭代。

如果它变为多对多,那么我可能会回退到一次处理一个项目(尽管你可以使用HashSet查找)。

但基本上,您的选择是sprocs(您需要和客户端层),或者只是在客户端中进行。

答案 1 :(得分:1)

  1. 您可以以平面文件格式从DB2导出数据,并将此平面文件用作外部表或使用sql loader,这是一个批处理过程。

  2. 还有一种称为异构连接的东西。在这里,您可以创建从Oracle到DB2的数据库链接。这使得可以实时查询DB2数据库,并且可以将Oracle表与DB2表连接。

  3. 您还可以将此数据库链接与物化视图结合使用。

    有不同类型的异构连接,因此请仔细阅读文档。

答案 2 :(得分:1)

它必须是实时数据吗?如果是这样,有些产品可用于异构连接,尤其是db2关系连接,它是联合服务器的一部分。如果接受延迟,则可以设置脚本以将数据复制到oracle,您可以使用该脚本执行本机连接。 将数据提取到客户端应用程序会导致性能下降。如果这是唯一的选项,请尝试创建db2存储过程以返回将使性能稍好的数据。

答案 3 :(得分:0)

如果可以将数据从旧数据库复制到您控制的数据库,您可以考虑将数据提取作业每天(或尽可能多地)从旧数据库复制一次(或尽可能多地)到Oracle DB。如果您无法识别自上次数据加载以来在旧数据库中生成的新记录,那可能不是那么简单。

然后,您可以在Oracle实例中执行连接。

答案 4 :(得分:0)

如果您询问供应商,可能最好的做法是购买另一种产品。

从IBM方面来看,有IBM Federation Server,它可以“将来自不同来源(如DB2,Oracle和SQL Server)的数据合并到一个虚拟视图中。”我想也有一个来自Oracle,但我对他们的产品不熟悉。

答案 5 :(得分:0)

请注意,如果您拥有DB2 Advanced Enterprise Server Edition(AESE),则包含Infosphere Federation Server。

这两种产品都允许您使用发送到一个DB的单个连接查询,该DB从两个DB返回数据。 Oracle产品非常好用,它允许Oracle将DB2数据库视为另一个Oracle数据库,并使DB2将Oracle数据库视为另一个DB2数据库。 (感谢IBM发布了DB2使用的DRDA协议的客户端和服务器端的规范。太糟糕了,没有其他供应商愿意这样做,尽管他们没有利用IBM这样做的事实。)

这两种产品都不是我所说的廉价产品。 为了便宜,您可以利用Oracle Database Gateway for ODBC
http://docs.oracle.com/cd/E16655_01/gateways.121/e17936/toc.htm