跨 DB2 和 Oracle 数据库连接信息最佳实践

Posted

技术标签:

【中文标题】跨 DB2 和 Oracle 数据库连接信息最佳实践【英文标题】:Joining Information Across DB2 and Oracle Databases Best Practices 【发布时间】:2009-04-03 13:46:46 【问题描述】:

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

我们在 DB2 数据库中拥有来自仍在加载数据的遗留应用程序的大量信息。我们在我们控制的 Oracle 数据库中也有信息。

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

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

有没有更简单的方法在数据库之间进行交互,或者至少,这种操作的最佳实践是什么?

【问题讨论】:

【参考方案1】:

我有两种方法。

在不同的机器上有两个 Sybase 数据库,我设置了存储过程,然后调用 like 函数来来回发送数据。这还允许存储过程审计/记录,以说服客户在此过程中没有丢失任何数据。

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

mysql 和 DB2 设置上,与您的情况一样,Db2 是“旧版但仍然存在”,我采用了类似于您所描述的设置:将数据提取到 (Java) 客户端程序中。

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

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

不过,基本上,您的选择是存储过程(您需要和一个客户端层),或者只是在客户端中进行。

【讨论】:

【参考方案2】:

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

    还有一种叫做异构连接的东西。在这里,您创建了一个从 Oracle 到 DB2 的数据库链接。这使得实时查询 DB2 数据库成为可能,并且您可以将 Oracle 表与 DB2 表连接起来。

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

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

【讨论】:

【参考方案3】:

必须是实时数据吗?如果是这样,那么有一些产品可用于异构连接,尤其是作为联合服务器一部分的 db2 关系连接。如果延迟被接受,您可以设置脚本以将数据复制到 oracle,您可以使用它进行本地连接。 将数据拉到客户端应用程序时性能会很差。如果这是唯一的选择,请尝试创建一个 db2 存储过程来返回数据,这将使性能稍好一些。

【讨论】:

【参考方案4】:

如果可以将旧数据库中的数据复制到您控制的数据库中,您可以考虑每天(或尽可能频繁地)将新记录从旧数据库复制到甲骨文数据库。如果您无法识别自上次数据加载以来遗留数据库中生成的新记录,这可能不会那么简单。

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】: 用于 DRDA 的 Oracle 透明网关http://www.oracle.com/technetwork/database/gateways/index.html IBM Infosphere 联合服务器http://www-03.ibm.com/software/products/en/ibminfofedeserv/

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

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

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

【讨论】:

以上是关于跨 DB2 和 Oracle 数据库连接信息最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

2015最佳原创系列全球首个支持事务一致性, 兼容DB2和Oracle的高速SQL on Hadoop引擎:Inceptor

Oracle11g——Oracle 简介

Oracle连接Db2

JDBC DB2 无法连接(SQLSTATE=08S01)

如何用DB2客户端连接远程数据库

DB2 与 Oracle 中的查询