1

我有两个数据库服务器,一个是 mysql,另一个是 db2,它们都在不同的机器上运行。我想通过使用连接从两个数据库的表中获取记录。我研究过链接服务器的概念,但问题是我找不到任何示例用于使用 db2 创建链接服务器(我只能找到 SSMS,即使用 Sql Server Mannagement Studio 来创建链接服务器),但我的情况是 mysql 和 db2,我需要为其中一个创建链接服务器/反之亦然。

请提出一些帮助我该如何实现这一点。

提前致谢!

4

2 回答 2

1

在 DB2 中,有一个称为联合(信息集成的一部分)的特性,它允许您将外部资源呈现给 DB2(包装器和昵称);您可以从 DB2 中查询这些外部资源,甚至可以在不同的源(其他 DB2 数据库、Informix | MSSQL 服务器 | Oracle | MySQL 数据库、平面文件等)之间进行连接。为了查询外部资源,此功能需要特别许可证。相反,如果您想查询其他 DB2 或 informix 数据库,此功能不需要额外的许可,因为它是免费提供的(这些是 IBM 数据库)。

为了方便,有一个名为table functions的选项。这些函数在调用时返回一个表,然后,您可以将返回的数据与其他表连接起来。这些功能可以用 SQL PL(IBM 过程语言)、C 或 Java 开发。

使用第二个选项,您可以在 Java 中创建一个表函数,它查询 MySQL 表,然后将数据返回给 DB2。我编写了一个关于如何在 Twitter 中查询“主题”并将该数据返回给 DB2 的示例。您必须执行几乎相同的操作,但不是查询 Twitter,而是配置您的其他数据库。 http://angocadb2.blogspot.fr/2012/02/accediendo-tweeter-desde-db2-table.html

于 2013-01-22T16:49:29.947 回答
0

@AngocA 它不起作用,但谢谢你的建议。

经过长时间的搜索后,我自己想出了上述自我帖子的答案,并考虑将其发布在这里,因为在我们需要从远程的两个不同数据库服务器获取数据的任何组合场景的情况下,这将对其他人有所帮助/local 本质上和链接服务器概念失败时。

我们可以使用一个名为 Unity Jdbc 的第三方 jar,我们可以在我们的 java 代码中以简单的方式使用它来加载驱动程序,然后像旧的 jdbc 一样获得连接。

1) 像这样加载驱动Class.forName("unity.jdbc.UnityDriver"); 2) 像这样获取连接 DriverManager.getConnection(jdbc:unity://test/xspec/mysqldb2.xml); 3) 获取记录(DDL/DML) 4) 关闭连接

可以访问 Unity Jdbc http://www.unityjdbc.com/

在我们的代码中使用这个 jdbc,我们实际上加载了一个基于 xml 的文件,该文件定义了我们需求的所需数据源。

一旦一切都设置好了,就可以轻松地从来自两个不同远程数据库的两个不同表中形成一个查询。语法:dbname.tablename.fieldname

此外,我们不需要处理任何进一步的 xml 配置来关闭在关闭外部实际连接后创建的内部连接。

任何问题写回。

于 2013-01-29T07:25:18.063 回答