关于数据库迁移,如果操作系统相同,例如从 Windows 系统迁移到 Windows 系统,或者从 AIX 系统迁移到 AIX 系统都比较好处理,一般使用 BACKUP 和 RESTORE 命令就可以进行。当然,有些情况下需要注意表空间重定向的问题。

那么,如果数据库迁移涉及到的操作系统不相同该怎么办呢?BACKUP 和 RESTORE 这个方法就行不通了。DB2 UDB 提供了两个非常实用的工具,一个是数据迁移工具 db2move,另一个是数据字典获取工具 db2look。

以下是我在项目中将db2数据库由windows xp测试环境迁移到linux下的具体步骤

1 登录windows,使用 db2move 命令将源数据库(CCNS)数据导出至指定的文件夹D:dbbackdb2moveCNAS 下

引用

C:Documents and SettingsAdministrator>cd /d D:dbbackdb2moveCCNS

D:dbbackdb2moveCCNS>db2move CCNS export -sn db2inst1 -u db2inst1 -p *****

运行导出,成功后会显示 Disconnecting from database ... successful!

2 使用 db2look 命令将数据库 DDL 导出至指定的文件夹D:dbbackdb2lookCCNS下

引用

C:Documents and SettingsAdministrator>cd /d D:dbbackdb2lookCCNS

D:dbbackdb2moveCCNS>db2look -d CCNS -e -a -o db2look_CCNS.sql

3 用ssh工具登录到linux系统中(当然其它工具也行),创建新数据库和数据结构

登录时用户名不要用root而是用db2安装时默认的用户,例如db2inst1/db2admin,登陆进去以后,用ssh自带的文件上传工具,把刚才导出的 D:dbbackdb2move 和 D:dbbackdb2look文件夹上传到linux系统中 如 /db2home/db2inst1/db2back/db2look/CCNS

创建新数据库,并执行数据库DDL语句,创建数据结构

引用

db2inst1@ccns-archive-db:~> cd db2back/db2move/CCNS

db2inst1@ccns-archive-db:~/db2back/db2move/CCNS> db2 CREATE db CCNS

db2inst1@ccns-archive-db:~/db2back/db2move/CCNS> db2 -tvf db2look_CCNS.sql

4 linux系统中 使用 load 命令装载数据

引用

db2inst1@ccns-archive-db:~> cd /db2home/db2inst1/db2back/db2move/CCNS

db2inst1@ccns-archive-db:~/db2back/db2move/CCNS> db2move CCNS load

操作顺利的话,数据会被转移到linux下面。要注意两个问题

1) 关于表模式,windows下面的表用户名db2admin ,里面的表模式也是 db2admin 而linux下面的默认用户的是db2inst1 表模式也是db2inst1,所以需要做以下处理

D:DBBackCNASdb2lookCCNSdb2look_ccns.sql里面的db2admin字符全部替换成 db2inst1

D:DBBackCNASdb2moveCCNSdb2move.lst 也做同样的操作

这样到入到linux系统后,就与linux默认的用户对应上了

2)在db2move过程中会有些表因为检查约束可能会处于暂挂状态,需要执行SET INTEGRITY命令来恢复它的暂挂状态。

引用

可以从系统表中检索处于检查暂挂状态的表信息

Select tabname from syscat.tables where status='C'

对暂挂的表执行

set integrity for usertbl ALLOW NO ACCESS immediate checked

导出的时候,可能会有个别表的数据丢失,这时候只能对相应的表执行db2move命令重新load了,如果还是不行就重建表再load

load单个表的命令

引用

db2 load from tab11.ixf of ixf terminate into db2admin.xxxxxxxxx

tab11.ixf对应的是xxxxxxxxx表