swmzzz 2016-01-12
IBM Data Studio(文中简称 DS)在当前最新的 4.1 版本中,相较于之前的 DS3.x 的版本,对联邦数据库提供了更加全面的支持。本文将介绍如何在 DS 中创建和管理联邦数据库对象。
在当今大型的企业和机构中,海量和复杂的数据及众多的组织部门,业务的不断发展及企业间的竞争和合并,使得这些企业和机构几乎不可避免地使用不同数据库管理系统来存储和管理其重要的数据。IBM 提供的 DB2 和其它各类主流数据库的联邦功能对企业和机构的此类信息整合的需求提供了强大的支持。 同时,自 DB2V10 开始,随着 DB2 一起发布的集数据库管理,开发,SQL 调优与一体的集成工具 IBM DataStudio 在它的 4.1 的版本中,也提供了对联邦数据库对象创建和管理的全面支持,DS4.1 支持对以下 8 种远程数据源创建和管理联邦数据库对象: SQL Server,Oracle,Teradata,Informix,JDBC,ODBC,DB2,SYBASE。在之前的 DS3.x 版本,仅支持远程的 DB2 和 Oracle 这两种数据源。并且 DS4.1 在创建 Nickname 时,新增加了对远程数据源上的表的自动发现的功能,本文将使用实例介绍如何使用 DS4.1 创建和管理联邦数据库对象。
在使用 DataStudio 为不同的数据源创建联邦数据库对象之前,假设您已经配置好了 DB2 联邦服务器。DB2 联邦服务器的配置是操作系统层面的操作,而 DataStudio 是操作数据库的工具,因此你需要事先在您的 DB2 联邦服务器上配置好各种数据源的支持,通常 DB2 联邦服务器对各类数据源支持的配置包含以下步骤:
1. 把 DB2 联邦服务器上实例参数 federated 设为 YES。
2. 在 DB2 联邦服务器上安装配置好所支持数据源的客户端 , 其中 DB2 和 informix 的不需要额外安装,DB2 联邦服务器自带这两种数据源的支持。
3. 安装 DB2 联邦服务器的对各种数据源支持的 Wrapper,Wrapper 提供 DB2 联邦服务器和其它类型数据源交互的功能,在安装向导中,您可以配置 Wrapper 和对应数据源库文件的关联。 这些配置将被写入 DB2 联邦服务器的 db2dj.ini 文件中。
4. 如果您是先安装的 DB2 联邦服务器的 Wrapper,后安装的各类数据源的客户端,你也可以手动编辑 db2dj.ini 文件,添加各个 Wrapper 和对应数据源的关联。从 DB2V10.1 开始,提供了一个图形化的 Wrapper 配置工具 rwcfg,你也可以用它来配置 Wrapper,配置的结果将保存在 db2dj.ini 文件中。
当联邦服务器的设置完成,您就可以连接到 DB2 联邦服务器而对其它各种数据源上的表和存储过程进行操作了。接下来将介绍如何使用 DS4.1 来管理联邦数据库对象。
本节将以 DB2 和 Oracle 联邦为例,用实例讲解使用 DS 创建 Wrapper,Remote Server,User Mapping 和 Nickname。
1. 为 DB2 联邦数据库创建一个数据库连接。
启动 DS, 在 Administration Explorer( 文中简称 AE) 视图中点击“向下箭头”的图标,选择 New connection to a database,如下图 1:
注:如果 AE 视图没在 DS 中打开,请点击 DS 菜单条上的 Windows->ShowView->Other, 在弹出的向导中展开文件夹 Data Management, 选择 Administration Explorer,点击 OK 按钮就可以打开此视图。
之后将会打开创建数据库连接的向导,在向导中选择数据库管理器的类型,本例中是 DB2 for Linux, Unix, and Windows,然后在向导中输入数据库的连接信息,如下图 2:
在图 2 中点击 Test Connection 按钮,确认可以连接成功,然后点击 Finish 按钮,就可以在 Administration Explorer 视图中创建一个数据库连接。
2. 创建一个更改计划
在 DS 中创建一个更改计划 (Change Plan),然后在这个更改计划中加入创建 Wrapper,Remote Server 和 User Mapping 的操作。 在 DS 的 AE 视图中,展开刚创建的数据库连接下的联邦数据库节点,右键点击 Change Plans,选择 Create Change Plan,如下图 3:
接下来,会弹出一个对话框提示输入更改计划的名字,指定名字为 testplan1,如下图 4.
点击上图中的确定按钮,新创建的更改计划会显示在 DS 的对象列表视图 (Object List Editor 简称 OLE) 中,如下图 5.
从图 5 中可以看出,这个更改计划处于 pending 的状态,等待被执行,但是其中包含 0 个 User change,需要加入一些操作才能被执行。接下来把创建联邦数据库对象的操作加入其中。
3. 在更改计划中加入创建 Wrapper,RemoteServer 和 UserMapping 的操作
从 DS 的 AE 视图中,展开文件夹 Federated Database Objects, 右键点击文件夹 Wrappers,选择 Create Wrapper, 您将会看到在 DS 的 OLE 中会列出当前联邦数据库所有的 Wrapper, 其中包含您正准备创建的 Wrapper, 并且这个 Wrapper 的属性视图 (Properties View) 会被打开。在属性视图中的 name 文本框中输入 Wrapper 的名字 TESTORAWRA1, 在 Data Source 下拉列表中选择 ORACLE, 其中 Data Source 下拉列表中包含 8 种数据源选项 , 在 Library name 下拉列表中选择 libdb2net8.a(Aix), 其中 Library name 下拉列表包含 3 个平台文件选项,本例中的 DB2 联邦数据库安装在 Aix 机器上。细节请参考下图 6.
点击查看大图
接下来,基于以上 Wrapper 创建一个 Remote Server,在 DS 的 AE 视图中,右键点击文件夹 Remote Servers, 选择 Create RemoteServer, 在弹出的对话框中选择以上刚创建的 Wrapper. 如下图 7.
在上图中点击确定按钮,此时在 DS 的 OLE 中列出当前联邦数据库中所有的 Remote Server, 其中包含您正准备创建的 Remote Server, 并且这个 Remote Server 的属性视图会被打开。在属性视图中选择 General 页面,然后在 name 文本框中为 Remote Server 指定名字为 TESTORASVR1, 在 TYPE 下拉列表中选择 ORACLE, 在 Version 下拉列表中选择 ORACLE 的版本,本例中使用的 ORACLE 版本是 11,在 Wrapper 下拉列表中选择上面刚创建的 Wrapper TESTORAWRA1, 然后输入连接 ORACLE 的用户名和密码,如下图 8.
再在图 8 中所示的属性视图中,选择 Options 页面,然后勾选 NODE 属性,为 NODE 指定值,本例为 ORACLE 事先配置好的节点名为 ora11gcsdl1,其它选项都是可选的,如下图 9.
然后,为上述新建的 Remote Server 创建 User Mapping。在 DS 的 AE 视图中,右键点击文件夹 User Mappings, 选择 Create User Mapping,在弹出的对话框中选择刚创建的 Remot Server. 如下图 10.
在上图中点击确定按钮,此时在 DS 的 OLE 中列出当前联邦数据库中所有的 User Mapping, 其中包含您正准备创建的 User Mapping。在这个 User Mapping 的属性视图中选择 General 页面 , 在 Local user ID 文本框中输入 DB2 联邦数据库的用户名,在 Local Server name 下拉列表中选择刚创建的 Remote Server, 然后在 Remote User ID 和 Remote password 文本框分别输入远程 ORACLE 的用户名和密码,如下图 11.
点击查看大图
此时,我们可以看到在 OLE 上边的更改计划的工具栏上,更改计划 testplan1 右边的数字从最初的 0 变成了 3,代表目前 testplan1 中包含 3 个操作,分别是创建 Wrapper,创建 RemoteServer 和创建 UserMapping。点击更改计划工具栏右边绿色的运行按钮 (Review and Deploy Changes),会弹出预览和部署 (Review and Deploy) 的对话框并产生所有操作的 DDL, 如下图 12.
在上图中点击运行按钮,在 DS 的 SQL Results 视图中可以看到 DDL 运行的结果,如下图 13.
从运行结果中我们可以看到,所有的 SQL 都被成功执行,指定的 Wraper,RemoteServer 和 UserMapping 被成功创建。
4. 在远程 ORACLE 数据源上创建表
本例中我们在远程的 ORACLE 服务器上创建一个表,然后在 DS 中为这个表在创建 Nickname.
1) 首先登录到 DB2 联邦数据库的机器,连接到测试的数据库。
db2 connect to testdb Database Connection Information Database server = DB2/AIX64 9.7.7 SQL authorization ID = IIFVT66 Local database alias = TESTDB
2) 打开一个 session 连接到 ORACLE 服务器端。
db2 set passthru TESTORASVR1 DB20000I The SQL command completed successfully.
3) 在远程 ORACLE 服务器上创建一个表。
db2 "create table J15USER1.TESTTAB01(C1 integer, C2 varchar(12))" DB20000I The SQL command completed successfully.
5. 为远程 ORACLE 数据库上的表创建 Nickname
在 DS 的 AE 视图中,右键点击文件夹 Nicknames, 选择 Create Nickname, 在弹出的对话框中选择一个 Schema. 如下图 14.
选择一个 schema 后点击确认按钮,此时在 DS 的 OLE 中列出当前联邦数据库中所有的 Nickname, 其中包含您正准备创建的 Nickname。在这个 Nickname 的属性视图中选择 General 页面 , 在 Name 文本框中为 Nickname 指定一个名字,在 Server 下拉列表中选择刚创建的 TESTORASVR1, 然后在 Remote Schema 文本框中输入远程 ORACLE 上的 schema, 在 Remote table 文本框中输入我们刚才创建的表 TESTTAB01。请参考下图 15.
在此强调一下,如果在做数据库对象操作之前没有创建更改计划,DS 会为用户的操作默认创建一个更改计划。如上图,一个名为 Default Change Plan2013-04-11 13-44-19 的更改计划被默认创建,此更改计划包含一个操作,也就是我们创建 Nickname 的操作,点击更改计划菜单栏右边绿色的预览和部署 (Review and Deploy Changplan) 按钮。在弹出的预览和部署对话框中会包含创建 Nickname 的 DDL,如下图 16.
在上图中点击运行按钮,从 SQL Result 视图中我们可以看到 Nickname 被成功的创建。新创建的 Nickname 也显示在 OLE 中,如下图 17.
为其它数据源创建联邦数据库对象的操作和以上步骤类似,都是在 DS 的 AE 视图,OLE 视图,和属性视图中操作,然后部署所对应的更改计划。 至此,读者可能发现当创建 Nickname 时,需要手动地输入远程数据源上的表,如果要创建多个 Nickname 时,需要一个一个地去创建,这确实不太方便。为了更加方便用户的操作,在 DS4.1 中加入了 Nickname 的自动发现功能,此功能允许用户同时为多个远程数据源上的多个表创建 Nickname。下面将做详细介绍。