使用 IBM DB2 Migration Toolkit 迁移数据

最近您是否要将应用程序移植到 Linux™、UNIX® 或 Windows® 上的 IBM DB2® Universal Database™(UDB)?您是否想将数据从目前部署的 Oracle 或 SQL Server 转移到 DB2?那么,请通过本文学习如何使用 IBM DB2 Migration Toolkit 来完成这个任务。

简介和背景

本文面向符合以下情况的开发人员、管理员或独立软件提供商(Independent Software Vendors,ISV):

  • 拥有同时支持 IBM DB2 Universal Database (UDB) 和非 IBM 数据库(例如 Oracle 和 SQL Server)的数据库应用程序。
  • 拥有希望将自己的数据从 SQL Server 迁移到 DB2 的客户。

 

人们常常问我以下问题:

我已经成功地将数据库应用程序移植到 DB2,但是目前还有一些客户在运行 Oracle/SQL Server,而他们希望将生产系统转移到 DB2。我该怎样迁移数据呢?

如果用于非 IBM 平台的数据库模式与用于 DB2 的模式相同(或非常类似),那么可以通过使用 IBM Migration Toolkit (MTK) 来完成数据迁移。因此,本文假设数据库模式的移植已经完成,只关注如何将数据从 Oracle 或 SQL Server 数据库迁移到 DB2(使用 MTK 中的数据迁移功能)。

在本文中,我们将 Oracle 或 SQL Server 数据库称作 源数据库,而将 DB2 数据库称作 目标数据库。我们假设您已经适当创建了一个具有模式的空的目标数据库。

在开始之前,确信您已经:

  • 下载并安装了免费的 IBM DB2 Migration Toolkit
  • 有足够的磁盘空间,可以将源数据库卸载到安装了 MTK 的系统的文本文件中。
  • 有一个用来创建源数据库的模式的脚本(用作 MTK 的输入)。

 




任务 1: 导入用于源数据库的模式脚本

  1. 启动 MTK,并单击 Launch the Migration Toolkit product 按钮。

    图 1. 启动 MTK
    图 1
  2. 创建一个新的 MTK 项目。您可以随意为该项目起个名字。在下拉菜单中,选择适当的源数据库类型以及目标 DB2 的版本(这里是 DB2 for Linux、UNIX 和 Windows)。


    图 2. 创建一个项目
    图 2
  3. 将源 SQL 脚本导入 MTK。MTK 将解析这个脚本,生成源数据库的模式的一个内部 XML 表示。这样,MTK 就知道源数据库的结构。

    图 3. 导入源数据库 DDL 脚本
    图 3

    提示:如果使用只包含表的 DDL 的输入脚本,可以提高 MTK 的性能。也就是说,应去掉用于函数、触发器、存储过程等等的 DDL。MTK 只需要知道源表的结构,生成导入/导入脚本即可。

  4. 在顶端,您将看到 MTK 有 5 个标签页。在 Covert 标签页中,单击 Convert 按钮。在这一步中,MTK 将解析上一步中提供的输入脚本。如果您的模式有很多对象,那么这一步可能要花几分钟的时间。在完成转换之后,就会进入 MTK 的 Refine 标签页。

    图 4. 使用 CONVERT 让 MTK 知道源数据库模式
    图 4
  5. 在 refine 标签页中,检查 Translator Information,并确认所有语法都被接受,而没有任何重大错误。

    图 5. 查看 MTK 的 REFINE 标签页
    图 5

注意,有效错误或警告可以放心地忽略。例如:

  • 16 Duplicate definition of object-name
  • 20 Object name has been changed to new-name



任务 2: 将 Oracle/SQL Server 数据提取到文本文件中

  1. 至此,MTK 已经知道源数据库以及需要提取数据的表,现在就可以生成用于 DB2 的数据提取脚本和数据加载脚本。

    在 Generate Data Transfer Scripts 标签页中,指定用于数据提取和加载过程的选项。



    图 6. 数据提取和加载选项
    图 6

    我们建议选择以下选项:

    选项 原因
    DB2 Data Loading Options 使用 LOAD 我们希望在 DB2 中有一个正确的源数据库数据的副本。因此,这是正确的选项,因为您不希望激活任何触发器。LOAD 也要快于 IMPORT
    DB2 LOAD/IMPORT mode 使用 REPLACE 当某些表加载失败时,您不希望将数据附加到任何目标表后面,这时应该重现开始加载过程
    File Format 使用 DEL 节省磁盘空间,保留字符串中的空格,在大多数情况下都起作用

    重要: 应确保 Directory for data extraction 中指定的目录有足够的空间,以便将源数据库卸载到文本文件中。

  2. 单击 Create Scripts 按钮。注意,这里并不真正提取或加载任何数据。这一步只是根据 MTK 从输入脚本和上一步选定的选项中收集的信息,来生成执行上述动作的脚本。
  3. 在 Deploy to DB2 标签页中,提供 DB2 数据库的名称。
    提供关于以下各项的信息:
    • 目标数据库名。
    • 目标数据库(本地或远程)。
    • 用于目标数据库的用户名和密码。用户名 必须与目标数据库中创建表时所在的模式相匹配。
    取消选择
    • Launch script-name in the database
    选择
    • extract (from source database) and store data on this system
    • Load data to target database using generated scripts


    图 7. 提取和加载数据到目标数据库
    图 7

    单击 Change source database 按钮,确认源数据库无误。

    提示:如果在 Change source database 对话框中看到 Driver Not Available,那么需要更正 Windows 系统的类路径(classpath),以包含 Oracle 的 classes111.zip (或任何提供了 Oracle JDBC 驱动程序的类文件)。这时可以保存项目,退出 MTK。更改类路径并重现启动 MTK,以便继续处理这个项目。



    图 8. Driver Not Available 错误
    图 8

    为了开始数据迁移,请单击 Deploy 按钮。检查产生的 HTML 报告,并确定数据是否迁移成功。




附加提示

如果 MTK 不能接受您提供的输入脚本,那么修改该脚本,并将其重新转换,直到脚本被顺利接受为止(通过查看 Refine 标签页中的消息)。 您的目标是让 MTK 解析输入脚本,使源数据库基表的结构的错误尽可能地少。除了涉及基表结构的错误或警告之外,其他错误或警告可以忽略。例如,有关索引和视图的错误或警告就可以忽略。

记住,当源模式与目标模式相同或几乎相同的时候,这种方法使用效果最好。如果这种方法不适合您的情况,不管怎样,您应该试一试,使用 MTK 生成的脚本作为敲门砖。

通过增加目标数据库的实用程序堆(utility heap),可以提高 DB2 LOAD 实用程序的性能。

db2 update db cfg for dbname using UTIL_HEAP_SZ 20000        (recommended minimum for a 2 CPU box)
db2 force application all                                    (to ensure that the change takes effect)

一个很好的经验法则是,在 DB2 服务器上将 util_heap_sz 设为至少 10000 x CPU 数目。如果系统内存不充裕,那么可以减少目标数据库中缓冲池的大小,因为 DB2 LOAD 实用程序不使用缓冲池。

如果正在使用系统管理存储(system managed storage,SMS)表空间,那么可以通过启用多页分配来减少分配磁盘空间的开销。

db2 force application all    (The utility db2empfa can only work when the database is inactive)
db2empfa dbname	             (This is an operating system level command)

如果将数据提取到还没有被源数据库或目标数据库使用(在任务2 的步骤 1 中指定)的一个或多个磁盘上,可以进一步减少磁盘争用。



参考资料

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值