首页 > 代码库 > db2v8 数据迁移

db2v8 数据迁移

db2数据迁移

版本:v8.1

任务:从生产拿数据到测试环境


处理过程中遇到的问题:

1、字符集问题。源数据库代码页为gbk,目标数据库代码页为uft-8

处理方法:导出或者导入时做格式转换

注意:由于在gbk库里面,一个汉字占两个字节,而uft-8里面,一个汉字站三个字节 ,导导入目标库时,存在字段超过长度的告警错误

导出:

db2 "export to xxx.ixf of ixf select * from xxx" 

db2 "export to xxx.ixf of ixf modified by codepage=1208 select * from xxx"  --会自动把表结构中字段类型为char和varchar的字段长度扩大一倍

db2 "export to xxx.del of del modified by codepage=1208 select * from xxx"

导入:

db2 "load from xxx.ixf of ixf replace into xxx nonrecoverable"

db2 "load from xxx.del of del replace into xxx nonrecoverable" 

注意:load导入时,如果长度字段超长,为把超长的每一条记录打印出来,数据量大的情况下很让人无语,会花大量的时间。对于这种错误,这次的处理方法就直接先把表字段长度扩大好了,然后再导入数据。查看load导入时的详细信息,可以使用db2 list utilities show detail

2、改字段类型问题

db2v8貌似不能直接修改,只能先删字段再加字段,无奈的时,该字段上面有索引....只能发大招,重建表了

为了安全,先备份原来环境的表结构

方法一:db2 "export to tbname.ixf of ixf select * from tbnamewhere 1=2"

方法二:db2look -d dbname -e -t tbname -o tbname.sql

将方法二中导出来的sql语句修改一下,把字段超长的长度加大,然后执行db2 -tvf tbname.sql 重新建表


另外:本来是想把测试环境的数据库删掉,直接把生产的数据库全部对象ddl拿回来,在测试环境还原一下,由于时间紧迫,又没做过,怕搞坏了,下次自己重新再做一次恢复,目前还没有相关的脚本,也希望有经验的同志不吝赐教,多多指导

临时建了一个空数据库

db2 create dbname using codepage=1208 territory cn

创建缓冲池

db2 create bufferpool bp16k size 2000 pagesize 16384

创建表空间

db2 create tablespace tpname pagesize 16384 managed by database using (file,‘/dd/ddd‘ size)   bufferpool bp16k












db2v8 数据迁移