关于数据库迁移,如果操作系统相同,例如从 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表