Heim >Datenbank >MySQL-Tutorial >db2v8数据迁移

db2v8数据迁移

WBOY
WBOYOriginal
2016-06-07 16:03:00960Durchsuche

db2数据迁移 版本:v8.1 任务:从生产拿数据到测试环境 处理过程中遇到的问题: 1、字符集问题。源数据库代码页为gbk,目标数据库代码页为uft-8 处理方法:导出或者导入时做格式转换 注意:由于在gbk库里面,一个汉字占两个字节,而uft-8里面,一个汉字站三

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

总结:在迁移过程中,还碰到了其他问题,如日志溢出,死锁等,毕竟测试环境和生产的是没得比,而且参数配置也存在差别。但总的来说,大部分问题都还是可以处理好。

感谢同事老师指导。小小的心得:计划好要做的事情,考虑好存在的问题,做好每一步,处理好碰到的问题。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn