IBM Migration ToolKit(MTK)
MTK 版本 1.3 是为从包括 Oracle 8i 和 Oracle 9i 部分支持的多个源数据库管理系统将数据、查询和过程语言迁移到下列目标系统而设计:
- IBM DB2 UDB Universal Database for Workstation 平台,版本 8.1 或更新版本
- IBM DB2 UDB Universal Database for i5/OS,版本 5.2 或更新版本
- IBM DB2 UDB Universal Database for z/OS,版本 8
对于从 Oracle 仓库迁移到 DB2 仓库,MTK 可能十分有用,因为它的功能包括:
- 迁移源可以是数据库数据源或 DDL 脚本。
- 它转换 Transact-SQL 或 PL/SQL 对象定义(包括存储过程、用户定义函数、触发器、包、表、视图、索引和序列)。
- 它具有一个全功能的 GUI 接口(Toolkit),为复杂的数据库转换进一步优化迁移和编制(tailor)选项。
- 它将 Transact-SQL 或 PL/SQL 脚本转换成 DB2 脚本。
- 它生成并运行脚本,以从源卸载数据,然后上传给 DB2。
developerWorks DB2 库包含了许多与 DB2 迁移主题有关的参考资料,特别是关于 MTK 的教程和技术文章:
- Sample Database Migration Tutorial Using IBM DB2 Migration Toolkit
- 使用 IBM DB2 Migration Toolkit 使到 DB2 的迁移自动化
- Move data using the IBM DB2 Migration Toolkit
MTK 在 AIX®、Linux、Sun Solaris 和 Windows 上运行。惟一可用的语言就是英语。可以从 IBM DB2 Migration Toolkit 站点完整下载 MTK。
场景
本小节将考查一些场景,其中展示了在 Oracle 和 DB2 UDB 世界中是如何完成这些事情的。注意,这里所呈现的解决方案并没有穷举所有可能。
- 场景 1
- 数据文件移动
在 Oracle 中,为了在表空间中重新定位(relocate)数据文件(不关闭数据库),需要执行下列步骤:
- Alter tablespace USERS read only - 使得该表空间为只读的。
- 使用 OS 级复制将数据文件复制到新的位置。
- Alter tablespace USERS offline - 一旦完成了复制,就使表空间 USERS 离线。
- Alter database rename '/oldpath/old_datafile1.dbf' to '/newpath/new_datafile1.dbf' - 使用旧的和新的全路经一个接一个地对数据文件进行重新命名。
- Alter tablespace USERS online - 再次恢复该表空间的在线状态。
- Alter tablespace USERS read write - 解除该表空间的只读模式。
在 DB2 UDB 中,只要发出带有正确参数的命令 db2relocatedb
。例如,db2relocatedb -f configFilename,其中 configFilename 就是 清单 25 中所看的: 清单 25. db2relocatedb 的示例配置文件DB_NAME=oldName,newName DB_PATH=oldPath,newPath INSTANCE=oldInst,newInst NODENUM=nodeNumber LOG_DIR=oldDirPath,newDirPath CONT_PATH=oldContPath1,newContPath1 CONT_PATH=oldContPath2,newContPath2注意,不像 Oracle,DB2 允许在一条命令中重新命名数据库名、路径、实例名和日志目录,只要是在配置文件中指定的即可。
- 场景 2
- 从同一 OS 和 DB 版本迁移数据库
在 Oracle 中,如果您出于某种原因需要从同一操作系统中的同一数据库版本迁移数据库(例如,从 Windows 2000 中的 Oracle 9i(发布 2)迁移至另一台机器上,其中也是 Windows 2000 环境并带有相同的 Oracle 版本),实际上就有一种快速的方法,而无需使用 Oracle imp/exp。在该情况下,您使用 create controlfile 选项。让我们假设旧的数据库名为‘AWT’,而新的为‘AWT1’。注意,这些步骤与控制文件完全丢失的情况相似。
- Alter database backup control file to trace - 备份控制文件。
- Shutdown immediate - 在源机器上关闭数据库清理(clean)。
- 复制转储文件 init.ora,并改写至目标机器。
- 编辑追踪文件,以便它读取第一行中的‘Create controlfile reuse set database "AWT1" resetlogs’。在新环境中,还要为数据文件和日志文件编辑任何结构化的修改。保存该文件,例如保存到 createControlFile.sql。
- 编辑 init.ora 文件以便也反映新的环境。那将包含 SID,其中包括修改的路径。
- 在新的机器中启动 mount 并运行 createControlFile.sql。
- Alter database open resetlogs - 您只能选择重新设置日志。
- 您可能还需要重新命名全局名。
本例中,DB2 UDB 整个就要更加简单。DB2 UDB 提供了 BACKUP 和 RESTORE 命令。BACKUP 命令将数据库备份至用户所指定的目录中。该备份可以使用 OS 级复制进行复制。restore 将通过在新环境中覆盖同一数据库或恢复到动态指定的新数据库名来进行恢复。假定‘SAMPLE’是旧环境中的数据库,而‘SAMPLE1’是新环境中的目标数据库。您可以从命令 CLP 执行下列步骤。注意,下面的备份是一种离线备份方法。
- 使用命令
db2 backup database sample to E:\SampleBKUP进行备份。 - 使用 OS 进行复制,将整个文件夹、SampleBKUP 复制到新环境中。
- 使用命令
db2 restore database sample from E:\YYY\SampleBKUP(恢复到现有的数据库中)或 db2 restore database sample from E:\YYY\SampleBKUP into SAMPLE1(恢复到新的数据库中)进行恢复。
- 场景 3
- 在同一 OS 中将数据库从低版本迁移至高版本(不同机器中的 Oracle 8.1.7 到 9iR2)
最佳方法就是通过使用导入和导出实用程序,使用所支持的迁移。在进行尝试之前,请注意,低版本到高版本的迁移是所支持的一种。关于兼容性,请查阅 Oracle Metalink Note Id 132904.1。本例中,您实际上具有下列选择:
- 全数据库导出
- 表空间级导出
- 模式级导出
- 表级导出
我们将考虑使用表空间级的可移植导出/导入。假定具有一个表空间 USERS,且要移植模式 LILY。
在 Oracle 8.1.7(源)上执行下列步骤:
- Alter tablespace USERS read only
- exp \"sys/password as sysdba\" file=trans817.dmp tablespaces=users transport_tablespace=y
- 将属于 USERS 表空间和 trans817.dmp 的数据文件经磁带复制到 Oracle 9iR2 所在的新机器上
- 删除包含内容的表空间 users(如果 USERS 表空间已经存在)
- imp \"sys/password as sysdba\" file=trans817.dmp transport_tablespace=y datafiles=users01.dbf
注意,为了使用可移植的表空间,Oracle 版本必须是 8i 或 9i。您可以移植到更高的版本,但不可以是更低版本。请查阅 Metalink note 77523.1 和 291024.1。






