站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Eclipse 专题与 Apache Derby 一起使用 DB2 plug-ins for Eclipse,第 2 部分

与 Apache Derby 一起使用 DB2 plug-ins for Eclipse,第 2 部分

摘要: IBM DB2 Universal Database (UDB) plug-ins for Eclipse 为 Cloudscape 10.0 和 Derby 用户提供了将 Cloudscape 数据库迁移到 DB2 UDB 数据库的能力。本文将介绍如何使用这个基于 Eclipse 的工具来迁移使用多产品配置的数据库,并解决迁移过程中碰到的所有问题。

概述

本文将讨论包括在 DB2 plug-ins for Eclipse 中的迁移工具的架构。文中将讨论支持环境,并将通过一些详细的实例解释了不同的迁移配置。此外,本文还将介绍该工具的局限性以及一些关于故障检修的提示。在阅读本文之后,您应该可以理解如何将 Cloudscape 数据库迁移到 UDB DB2 数据库,并解决在这过程中遇到的所有问题。Cloudscape 是 Apache Derby 开源数据库的商业版本。

在本系列的第一篇文章 与 Apache Derby 一起使用 DB2 plug-ins for Eclipse 中,作者重点解释了该工具的数据库浏览器和编辑功能。本文则着重讨论该工具的数据库迁移组件。该工具可用于将 Cloudscape 10.0 数据库迁移到 DB2 UDB 8.1 或更高版本的数据库。这个基于 Eclipse 的工具允许 Derby 用户迁移到功能完善的企业级数据库系统环境中,例如 DB2 UDB,并将 DB2 增加的性能利用到大规模系统中。该工具另一个很好的用途是可以先用 Cloudscape 开发应用程序原型,然后在部署之前将数据库迁移到 DB2 中。

由于 Cloudscape 的 SQL 是 DB2 的一个子集,因此在使用 DB2 plug-ins for Eclipse 时,大多数迁移问题便迎刃而解。Eclipse 平台的用户将发现,在执行两种数据库环境之间的迁移时,这些界面对他们来说很熟悉,而且易于使用。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

迁移过程中的组件

为了使用 DB2 plug-ins for Eclipse 将 Derby 数据库迁移到 DB2 UDB 数据库,需要三大组件。

从本地或远程 Cloudscape 数据库迁移到本地或远程 DB2 数据库都是受支持的。下面的图展示了迁移过程中用到的组件。 LWLUW 分别表示 Linux 和 Windows 以及 Linux、Unix 和 Windows。对于这些组件来说,这些都是受支持的平台。





<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

迁移配置

上图展示了迁移所需的三大组件。将 Eclipse 与该迁移工具一起使用的一个优点是,这些组件具有可位于不同位置的灵活性。下面的图展示了不同用户场景下可能出现的环境和配置的组合。

Localhost Configuration 是指安装在本地主机上的 Derby、DB2 plug-ins for Eclipse 和 DB2 UDB。这是最简单的管理和使用配置。




在远程 Cloudscape 配置中,Cloudscape 安装和运行在一台使用 Cloudscape 网络服务器的远程主机上。为了让本地主机访问远程 Cloudscape 数据库,必须在本地主机上安装 DB2 JDBC Universal Driver。DB2 UDB 数据库的通过 DB2 JDBC Universal Driver 来访问的,该驱动程序随 DB2 Run-Time 客户机一起发布,但是不需要跨网络进行调用。




接下来的一种配置是远程 DB2 配置,它要求在本地主机上一起安装 DB2 客户机和 DB2 Universal JDBC Driver,以访问远程 DB2 服务器。Derby 和 DB2 plug-ins 安装在本地机器上。




最后一种配置将数据库服务器和 Eclipse 分布到三台主机上。远程 Cloudscape 主机充当 Cloudscape 数据库服务器,远程 DB2 主机充当 DB2 数据库服务器,而本地主机则充当这两台远程主机的客户机。本地主机必须安装 DB2 plug-ins for Eclipse、DB2 Universal JDBC Driver 和 DB2 JDBC Driver 许可文件以及 DB2 Run-Time 客户机,以便跨网络访问 Derby 和 DB2 数据库。




在后面的小节中将详细讨论上述每一种配置,展示所需的组件,并解释如何配置这些组件来成功地迁移数据库。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

迁移工具的局限性

该工具的 beta 版只支持表和视图的迁移。下面这些都不受支持:


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

迁移插件的架构

该迁移工具是 DB2 plug-ins for Eclipse 工具的一部分。在上一篇文章中曾提到它,大多数基于 Eclipse 插件的工具都是由多个插件组成的,该工具也是如此。下面列出了组成该工具迁移功能的特定插件。

表 1. 迁移插件

<table border="1" cellpadding="3" cellspacing="0" width="70%"><tr valign="top"><td> 名称 </td><td> 用途 </td></tr><tr valign="top"><td> com.ibm.db2.tools.csmigration_1.0.2 </td><td> 迁移插件的核心功能</td></tr><tr><td> com.ibm.db2.tools.csmigration.ui_1.0.2 </td><td>迁移插件的 UI 组件和表现
</td></tr><tr><td> com.ibm.db2.tools.csmigration.doc_1.0.2 </td><td> 迁移工具的文档和帮助 </td></tr></table>

Eclipse 平台很大程度上依赖于可扩展性的思想。Eclipse 的这种设计框架意味着每当创建一个新的插件时,都要扩展或使用已有插件中的功能。下面的图展示了迁移插件对其他 DB2 plug-ins for Eclipse 插件的依赖性,该插件本身也是基于 Eclipse 平台。而 Eclipse 平台则是以运行 Eclipse 的 JRE 为基础。Eclipse 左边的方框是 Cloudscape JDBC 驱动程序,用于访问本地 Cloudscape 数据库。Eclipse 右边的方框表示 DB2 JDBC 和 DB2 Command Line Processor (CLP),用于访问和迁移到 DB2 UDB 数据库。





<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

软件需求

这一小节中列出的软件都是必需的。前面的图中展示了可以在哪些地方安装该软件的各种选项,这取决于所需的配置。

I. 对于所有配置:

首先在本地主机上安装 IBM 的 SDK 或 Sun 的 JDK 中包含的 1.4.2 或更高版本的 JVM。如果使用 Windows 或 Linux 安装程序在本地安装了 Cloudscape,那么在安装过程中已经包括了 IBM 1.4.2 JRE。

II.本地主机远程 Cloudscape 主机上安装下面列出的 某一个 Derby 或 Cloudscape 数据库选项:

注:是否对 Cloudscape 和 Derby 这两个名称感到迷惑?
IBM Cloudscape 是 Apache Derby 开源数据库的商业版本。在本文中这两个名称可以交换使用。(要了解更多的信息,请参阅 Cloudscape 10.0 Technical Overview。)

  1. Cloudscape 10.0, GA version. (其中包括 IBM DB2 JDBC Universal Driver)
  2. Apache Derby 和 IBM DB2 JDBC Universal Driver

III. 在本地主机上安装 DB2 plug-ins for Eclipse:

如果已经在机器上安装了 Eclipse,那么这些插件中实际上包含了 Eclipse version 3.0,因此您需要将该产品安装在一个新的位置。

IV. 安装下面两种 DB2 配置选项中的 某一个

  1. 本地主机上安装 DB2 UDB 8.1.x 或 8.2,并创建一个可以迁移到其中的空的数据库。
  2. 远程 Linux、Unix 或 Windows 主机上安装 DB2 UDB 8.1.x 或 8.2,创建一个空的数据库, 并且本地主机上安装 DB2 Run-Time 客户机。
    请在阅读了关于不同可用版本的信息之后,从 developerWorks 下载 DB2 Run-Time client。

<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

配置 1,本地主机配置

至此已安装了所有的软件组件,首先从最简单的迁移,也就是前面 图 2 中所示的本地配置开始。这个例子给出了迁移过程的每一个步骤。在第一次成功迁移之后,接下来是给出关于内部原理的细节。

这里将提到迁移过程中可能遇到的一些常见问题,如果有其他问题,可以随时参考 故障检修小节。

第一个例子从一个极其简单的数据库模式开始 —— 整个数据库简单到只有一个表!该模式的 sql 如下所示。

<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>

drop table bikeshops;
create table bikeshops
(id integer,
 name varchar(20),
 address varchar(50),
 city varchar(20),
 specialty varchar(30)
);
insert into bikeshops
values
(1,
 'Chain Gang',
 '123 Main Street',
 'San Francisco',
 'bike locks'
);
insert into bikeshops
values
(2,
 'The Square Wheel',
 '55 Broadway',
 'Sausalito',
 'wheel rebuilding'
);
insert into bikeshops
values
(3,
 'The Cyclery',
 '425 Alameda Blvd.',
 'Oakland',
 'family bikes'
);
     
</td></tr></table>

现在,通过使用 ij 或 DB2 plug-ins for Eclipse,创建一个名为 derbydb 的 Derby 数据库,并运行前面的 sql。如果您还没有做这些,那么启动 Eclipse,并接受 DB2 plug-ins for Eclipse 建议的默认工作空间。

在 DB2 端打开您最擅用的工具,例如 Command Line Processor (CLP) 或 Control Center,并创建一个空的数据库,以便将 Derby 数据库迁移到这个数据库。在这个例子中,这个 DB2 数据库的名称为 db2db

创建一个到 derbydb 的嵌入式连接,并打开上下文菜单对 derbydb 的内容抽样。检验 bikeshops 表中的三行是否存在。

对于 derbydb 数据库,选择上下文菜单项 Migrate to DB2 UDB。下面的图展示了这一步骤。




接下来的屏幕要求提供关于所迁移到的目标 DB2 环境的信息。对于本地主机配置,下面的屏幕快照显示了一些典型的值。字段 Database vendor type 很重要,它应该是 DB2 Universal Database V8.1DB2 Universal Database V8.2 两者之一,具体是哪个则取决于 DB2 实例。而且, JDBC driver 字段应该是 IBM DB2 UNIVERSAL DRIVERIBM DB2 Application 两者之一。用于端口的值是 DB2 安装期间的默认值。




单击 Next 按钮,选择 Replace existing objects,因为 DB2 UDB 数据库是新的,因而它是空的。单击 Finish 按钮。如果迁移成功,则 Migration Report 应该会如实报告出来。现在 Database Explorer 视图看上去应该像下面的图这样。可以使用 SQL Scrapbook 或对新迁移的 DB2 数据库 db2db 抽样,以检验 APP.BIKESHOP 表中的三行记录是否被迁移过来。





<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

迁移的内幕

第一次迁移是如此简单,以致虽然迁移成功了,但看上去好像什么也没有发生。实际上,在背后发生了很多事情。迁移工具执行的三大步骤是:

DDL 迁移

对象定义迁移的第一步是通过 JDBC 连接到 Cloudscape 数据库生成 DDL。这个 DDL 是由 Schema DDL Generator 生成的,后者也是 DB2 plug-ins for Eclipse 的一部分。

接下来,将 Derby DDL 部署到 DB2 数据库。这也是通过 JDBC 由包含在 DB2 plug-ins for Eclipse 中负责部署的两个插件来完成的。在迁移期间将创建一个 DDL 日志,该日志被放在 \eclipse\workspace\.metadata\.plugins\com.ibm.db2.tools.csmigration\ddl.log 文件中。在关闭 Eclipse 时,该文件将被删除,因此,如果想在以后参考这个文件,那么需要将它保存到其他文件中。

数据迁移

在 DDL 迁移之后,必须通过 JDBC 将数据从 Cloudscape 中导出。

通过调用 DB2 Command Line Processor,数据被加载到 DB2 数据库中。这就是为什么在迁移时需要 DB2 Run-Time 客户机的原因。用于 DDL 迁移的数据库连接使用的是 JDBC,但在数据迁移阶段,则要求本地主机上有 CLP。在 CLP 进行处理时,将执行以下操作:

在这个阶段还将生成名为 data.log 的文件,该文件与 ddl.log 在同一个目录下。

验证

迁移过程的最后一步是验证 DB2 中各对象的状态与 Cloudscape 中对象的状态是否匹配。具体地说,Derby 和 DB2 数据库是通过 JDBC 连接的,这一步将检查每个对象是否被迁移,以及被迁移的表是否包含预期的行数。

在迁移的最后,将在 Eclipse 中显示验证报告,并包含指向前面提到的日志文件的指针,以便通过 GUI 将它们显示出来。

现在您已了解了迁移的幕后操作原理,下面将解释下面三种配置,与第一个例子相比,它们涉及的东西更多。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

配置 2,远程 Cloudscape 配置

在这个例子中,您将把 Cloudscape 附带的样本数据库从一个远程 Cloudscape 数据库迁移到安装了 Eclipse 和迁移工具的本地 DB2 UDB 数据库中。我们称这种环境为配置 2,您可以参考 图 3 中的架构。

迁移 Cloudscape 发行版中附带的 sample 数据库的第一步是启动远程主机上的 Derby Network Server(如果还没有启动的话)。

如果在 DB2 UDB 中还没有一个空的数据库,那么创建一个这样的数据库。在该例中,这个空数据库名为 cfg2db

接下来,在 Eclipse 中创建一个到 Cloudscape 数据库 sample 的数据库连接。 sample 数据库位于 /demo/databases 目录中。如果您对于如何建立到远程 Cloudscape 数据库的连接并不熟悉,那么本系列中的 第一篇文章讨论了如何做。

下面的图展示了到远程 Cloudscape 数据库 sample 的 Database Explorer 连接。




右击这个连接,然后选择 Migrate to DB2 UDB ... 菜单项。

系统将弹出 Migrate to a DB2 UDB database 窗口。与前面的迁移例子相比,这里惟一需要更改的是数据库名。然后单击 Next 按钮,并选择 Replace existing objects

现在要进行迁移,然后会弹出 Migration Report 窗口。这一次的迁移没能成功完成。




为了得到关于发生了什么事情的更多信息,可以单击 Show the data migration log 按钮。该信息显示问题出在 SAMP.EMP_PHOTOSAMP.EMP_RESUME 表中包含的二进制数据上。




关闭 Data Log 窗口和 Migration Report 窗口。现在, cfg2db 数据库的显示将如下所示。对 SAMP.EMP_PHOTO 表中的内容抽样,看看迁移二进制数据失败时发生了什么事情。




虽然 EMPNOPHOTO_FORMAT 这两列没有包含二进制数据或 Large Object (LOB) 数据,但仍然没有数据从 SAMP.EMP_PHOTO 表迁移出来。

由于迁移工具的局限性,这里的变通方法是使用一个 JDBC 应用程序转储 Derby 数据库的 SAMP.EMP_PHOTO 表中的数据,并使用 IBM DB2 Universal Database Command Reference, Version 8 手册中引用的 db2 export to ... 命令将该数据加载到 DB2 中。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

配置 3,远程 DB2 配置

对于接下来的示例配置 —— 本地 Cloudscape 数据库和远程 DB2 服务器,请参见 图 4。在该配置中,Cloudscape 数据库的迁移有 4 个步骤。

配置 DB2 客户机

通过 DB2 CLP (Command Line Processor) 连接到远程 DB2 UDB 数据库时,需要编目节点和数据库。这里需要知道关于远程数据库实例的以下信息:

从本地主机上已安装的 DB2 客户机中打开一个 CLP 窗口。下面显示的是编目名为 rnode 的远程节点以及已经创建的名为 remote 的远程数据库的命令。

编目远程节点的示例命令是:

对上面已编目的远程节点上的远程数据库进行编目的示例命令是:

下面是发出这些命令的一个示例 DB2 CLP 会话的输出。

<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>

C:\IBM\SQLLIB\BIN>db2
...
db2 => catalog tcpip node rnode remote dbhost.ibm.com server 60004
DB20000I  The CATALOG TCPIP NODE command completed successfully.
DB21056W  Directory changes may not be effective until the directory cache is
refreshed.
db2 => catalog database remote as remotedb at node rnode
DB20000I  The CATALOG DATABASE command completed successfully.
DB21056W  Directory changes may not be effective until the directory cache is
refreshed.
db2 => terminate
DB20000I  The TERMINATE command completed successfully.
</td></tr></table>

现在尝试从本地主机通过 CLP 连接到远程数据库,确保已经正确地编目了节点和数据库。

<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>

C:\IBM\SQLLIB\BIN>db2
...
db2 => connect to remotedb user db2user using holyEcowh
   Database Connection Information
 database server        = DB2/SUN 8.1.3
 SQL authorization ID   = DB2USER
 Local database alias   = REMOTEDB
</td></tr></table>

成功!您已经以编目为 remotedb 的数据库用户 db2user 的身份,使用密码 holyEcowh 连接到远程数据库。

在该配置中,接下来的一步是在 Eclipse 上创建到本地 Cloudscape 中名为 sample 的样本数据库的一个嵌入式连接。

连接到本地的样本数据库之后,在 Eclipse 中创建到远程 DB2 数据库的一个新连接,您在以前可能没做过这样的事。在 Database Explorer 视图中单击右键,并选择 New Connection。这一次,在 New Database Connection 向导的第一个屏幕中,选择 Choose a DB2 alias 作为连接名。随意为该连接命名选择一个名称 —— 在这个例子中,我选择 Remote DB2。单击 Next 按钮指定连接参数。下面的表展示了要输入到该屏幕中的正确的值。

表 2. 用于远程 DB2 数据库的连接参数

<table border="1" cellpadding="3" cellspacing="0" width="70%"><tr><td> JDBC driver </td><td>IBM DB2 Universal</td></tr><tr><td> Alias </td><td>在编目远程数据库时所创建的别名
例如: REMOTEDB </td></tr><tr><td> Class location </td><td>到作为 DB2 客户机一部分安装的 db2jcc.jar 和 db2jcc_license_cisuz.jar 的路径
例如:C:\IBM\SQLLIB\java\db2jcc.jar;C:\IBM\SQLLIB\java\db2jcc_license_cisuz.jar </td></tr><tr><td> Connection URL </td><td>不能编辑
例如: jdbc:db2:REMOTEDB </td></tr><tr><td> User ID </td><td>有连接权限的远程 DB2 数据库用户
例如: db2user </td></tr><tr><td> Password </td><td>远程 DB2 数据库用户密码
例如: holyEcowh </td></tr></table>

下面的屏幕快照展示了这些输入到连接向导中的值。




迁移 Derby 数据库的最后一步是在已有的嵌入式 Cloudscape 连接上使用迁移工具。在这个地方,该例的配置与上述两种配置略有不同,因此要注意存在的差异。

下面的屏幕快照展示了在这个例子中将引用的连接。第一个连接名为 sample,是到 sample 数据库的连接。最后一个连接名为 Remote DB2,连接到 DB2 数据库 REMOTEDB。右击 sample 连接下的 sample 数据库,并选择 Migrate to DB2 UDB ...




在显示的第一个屏幕中,选中 Use existing connection 复选框,并选择不久前建立的到远程 DB2 UDB 的连接。在我们的例子中,该连接的名称为 Remote DB2。由于前面所提到的限制,到远程 DB2 数据库的连接必须预先创建。




单击 Next 按钮并选择 Replace existing objects。这时将进行迁移,然后弹出 Migration Report 窗口。当您尝试迁移 LOB 数据时,给出的报告将解释与使用配置 2 时出现的一样的问题。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

配置 4,远程 Cloudscape 和 DB2 配置

对于最后一种配置,这里使用一个新的数据库和模式来说明数据库完整性问题,当把现有对象保存在 DB2 数据库中时,如果发生了部分迁移,那么可能导致这类问题。假设在 DB2 中有一个已有的数据库,其中包含一个表 T1,这个表定义有两列 —— id 列,是一个整数列;另一个列名为 a。 Cloudscape 数据库在模式中有两个表,分别为 T1T2。Cloudscape T1 表的定义与 DB2 T1 表类似,但不完全相同。 T2 的 id 列有一个到 T1 的 id 列的外键关系。该模式如下图所示。




如果使用这个模式迁移 Derby 数据库,并且迁移期间选中了 Preserve existing objects 选项,那么表 T1T2 之间的参照完整性将丢失。 下面的 SQL 创建了 T1T2 表。

如果使用这个模式来进行迁移,则需要采取以下步骤:

  1. 在远程 DB2 服务器上创建一个空的数据库。

  2. 在本地主机上为远程 DB2 数据库编目节点和数据库。

  3. 在 Eclipse 中创建一个到远程 DB2 数据库的连接,并运行下面列出的 SQL。

  4. 在远程 Derby 服务器上创建一个空的数据库。

  5. 在 Eclipse 中创建一个到远程 Derby 数据库的连接,并运行下面列出的 SQL。

  6. 尝试将 Derby 数据库内容迁移到 DB2 数据库。

  7. 探索各种方法来修复数据库完整性问题。

您可以自己完成步骤 1 至步骤 5,使用下面提供的用于 DB2 和 Derby 数据库的 SQL,同时注意用于它们各自的 SQL。模式名必须匹配,以便演示迁移问题。

以 DB2 用户身份在一个空的 DB2 数据库中执行下面这段 SQL。

DB2 SQL <table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>


CREATE table SCH.T1
(id integer,
 a  char(5)
)
insert into SCH.T1 values (1, 'row 1')
insert into SCH.T1 values (2, 'row 2')
</td></tr></table>

在一个空的 Derby 数据库中执行下面这段 SQL。

Cloudscape SQL <table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>


CREATE table SCH.T1
(id integer not null constraint id_pk PRIMARY KEY , 
 a  char(5)
);
insert into SCH.T1 values (1, 'cs-1');
insert into SCH.T1 values (2, 'cs-2');
insert into SCH.T1 values (3, 'cs-3');
CREATE table SCH.T2
(id integer,
 b  char(5),
FOREIGN KEY (ID)
REFERENCES T1 (ID)
);
insert into SCH.T2 values (2, 't2-2');
insert into SCH.T2 values (3, 't3-3');
</td></tr></table>

现在可以开始迁移了。右击远程 Cloudscape 连接,并选择 Migrate to DB2 UDB ...。记得在接下来出现的屏幕 Migrate to a DB2 UDB database 中使用已经创建的到远程 DB2 数据库的连接。在迁移选项窗口中,在这个例子中,应选择 Preserve existing objects,以便看到数据库完整性如何受影响。该选项的显示如下所示。




接下来单击 Finish 按钮。迁移报告上说: The table SCH.T1 does not have the expected number of rows。查看 DDL 日志时,相关的消息如下所示:

<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>

RDBExportMessage: CREATE TABLE SCH.T1:FAIL [DB2 SQL error: SQLCODE: -601, \
SQLSTATE: 42710, SQLERRMC: SCH.T1;TABLE]
RDBExportMessage: ALTER TABLE SCH.T1:FAIL [DB2 SQL error: SQLCODE: -542, \
SQLSTATE: 42831, SQLERRMC: ID]
RDBExportMessage: ALTER TABLE SCH.T2:FAIL [DB2 SQL error: SQLCODE: -573, \
SQLSTATE: 42890, SQLERRMC: SQL04119021536090;SCH.T1]
</td></tr></table>

查看 Data Log 时,您不能立即发现问题,但是如果真的有问题,那么这里还是值得查看一下的。例如,该日志的第一行会告诉我们数据库连接是如何建立的。在我们的例子中,连接信息是: db2 connect to REMOTEDB user db2user using holyEcowh。Data Log 中显示的另一个有趣的命令是 db2 set integrity (off) 命令。该命令用于想要迁移的表。在 Data Log 的结尾处,它告诉我们 db2 set integrity 已选中。

显然,迁移没有成功。纠正这个问题则取决于您所使用的 DB2 版本。

修复数据库完整性问题

对于 8.1.x 版的 DB2

该例子中的 T1T2 两个表被锁,因为 T2 打破了外键约束。

为更正这个问题,需要执行以下操作:

对于 8.2 版的 DB2

为了更正这个问题,需要执行以下操作:


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

迁移问题的故障检修

取决于您选择将数据库迁移到什么样的环境中,对于前面所讨论的几种配置,可能有一些不同。下面列出了迁移期间碰到问题时要检查的一些事情。

连接问题 数据库配置问题 迁移问题 从哪里查看信息
<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

结束语

阅读本文之后,您应该能够成功地将 Derby 或 Cloudscape 10.0 数据库迁移到 DB2 UDB 8.1 或 8.2 数据库。本文讨论了多种数据库环境和配置,其中包括到远程 Derby 和 DB2 主机的连接,以及它们之间的迁移。为了建立到远程 DB2 数据库的连接,文中解释了本地主机上 DB2 Run-Time 客户机的配置。作者还逐步解释了数据库 DDL 和数据的迁移操作。最后,提供了一个故障检修检验表,该表应该对解决迁移过程中遇到的所有问题有所帮助。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>


<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

作者简介<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="3"></td></tr><tr align="left" valign="top"><td>

</td><td></td><td width="100%">

Susan Cline 致力于使用 Cloudscape 为 Cloudscape 开发人员和用户开发技术内容。

</td></tr></table>
<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="3"></td></tr><tr align="left" valign="top"><td>

</td><td></td><td width="100%">

Gilles Roux 在 DB2 组织工作,负责开发数据库迁移工具。

</td></tr></table>

<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>


↑返回目录
前一篇: IBM Integration plug-in for Derby
后一篇: IBM DB2 plug-ins for Eclipse, Version 1.0.1 Beta