【问题标题】:Configuring mysql linked server with db2使用 db2 配置 mysql 链接服务器
【发布时间】:2015-05-22 04:20:14
【问题描述】:
我有两台数据库服务器,一台是 mysql,另一台是 db2,它们都在不同的机器上运行。我想通过使用连接从两个数据库中的表中获取记录。我研究过链接服务器的概念,但问题是我不能找到任何使用 db2 创建链接服务器的示例(我只能找到 SSMS,即使用 Sql Server Mannagement Studio 来创建链接服务器)但我的情况是 mysql 和 db2,我需要为其中一个创建链接服务器/反之亦然。
请提出一些帮助,我该如何实现这一目标。
提前致谢!
【问题讨论】:
标签:
mysql
db2
linked-server
【解决方案1】:
在 DB2 中,有一个称为federation(信息集成的一部分)的特性,它允许您将外部资源呈现给 DB2(包装器和昵称);您可以从 DB2 查询这些外部资源,甚至可以在不同的源(其他 DB2 数据库、Informix | MSSQL 服务器 | Oracle | MySQL 数据库、平面文件等)之间进行连接
为了查询外部资源,此功能需要特殊许可证。相反,如果您想查询其他 DB2 或 informix 数据库,此功能不需要额外的许可,因为它是免费提供的(这些是 IBM 数据库)。
按顺序,有一个称为表函数的选项。这些函数在调用时返回一个表,然后,您可以将返回的数据与其他表连接起来。这些函数可以用 SQL PL(IBM 过程语言)、C 或 Java 开发。
使用第二个选项,您可以在 Java 中创建一个表函数,它查询 MySQL 表,然后将数据返回给 DB2。
我编写了一个关于如何在 Twitter 中查询“主题”并将该数据返回给 DB2 的示例。您必须执行几乎相同的操作,但不是查询 Twitter,而是配置您的其他数据库。
http://angocadb2.blogspot.fr/2012/02/accediendo-tweeter-desde-db2-table.html
【解决方案2】:
@AngocA 它不起作用,但谢谢你的建议。
经过长时间的搜索,我自己想出了上述自我发布的答案,并考虑将其发布在这里,因为在我们需要从两个不同的数据库服务器获取数据的任何组合场景的情况下,这将对其他人有所帮助本质上是远程/本地以及链接服务器概念何时失败。
我们可以使用名为 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 配置来关闭在关闭外部实际连接后创建的内部连接。
任何写回的问题。