阿里巴巴数据库操作手册 19-数据迁移工具之exp/imp

V1.0

 

Revision

Author/Modifier Comments

No.

Date

1.0 2012/2/15 张中靖  
       

一、 目的

说明使用exp/imp进行数据迁移的前置条件、操作步骤,降低对对应用造成的影响及避免故障

二、 适用范围

l 所有线上库

三、 风险评估

l exp导出数据时没有使用compress=n参数,导致所有数据被压缩在一个extent里,导入可能由于没有连续的blocks满足需要,导致imp失败。

l 进行跨版本迁移数据时,exp导出数据没有使用低版本软件,导致无法imp数据

l 有些os对文件大小有限制,exp数据时需要使用filesize参数来分割导出文件

l exp导出数据时没有正确估计dmp文件所需空间,导致主机磁盘满。

l imp导入数据时没有使用ignore=y参数,目标库上存在表的情况下数据无法导入

l imp导入大量数据时没有使用commit=y参数,导致事务太久,undo资源占用过大无法及时回收。

l 跨字符集的数据迁移,由于字符集不兼容导致数据迁移失败。

l imp跨schema进行数据迁移时,没有正确指定fromuser、touser,导致数据没有正确导入

l imp时由于目标库上表结构和源库不一致,导入数据失败。

l imp导入结构后,由于导出不完整,导致有对象失效。

l 导入表空间不存在或者空间不足,导致表创建失败或者数据导入失败,导致其他应用报错

四、 操作流程

1. 准备工作

a) 检查源数据库和目标库的版本、字符集,如果目标库版本低于源库,使用目标库的软件做导出。字符集不一致,不建议使用exp/imp迁移数据。

b) 检查目标库上表结构和源结构是否一致,如果不一致,先修复结构,保证一致。

c) user_segments里查出导出表所占的空间大小,检查os对文件大小的限制。如果表大小超出文件大小,exp导出时加上这两个参数:

filesize=小于文件限制的数值m,file=exp01.dmp,exp02.dmp,…多个dmp文件

d) 表比较多的情况下,建议用parfile。各个参数在parfile里写好。

tables=(tab1,tab2,tab3,..)

e)根据需要书写query子句,这个参数跟direct=y冲突

2. 执行过程

a) 如果目标表是已存在数据,跟应用确认后,可以先进行导出备份,以防后面需要回退。

这里给出一个示例,将数据从schema:zhangzj迁移到zzzzzz。

先根据需求编辑exp、imp的参数文件:’-‘后面是参数说明,实际使用时去掉

cat exp_ws0208.par

userid=zhangzj/password@oindeve

direct=y –直接路径导出,加快导出速度

compress=n –避免数据全部压缩在一个数据块上

file=exp0208.dmp

log=exp0208.log

recordlength=65535 –写dmp文件时一次IO的大小,上限是65535,可以加快导出速度

tables=yz_ongimt_jingtzt

 

exp parfile=exp_ws0208.par –进行数据导出

 

cat imp_ws0208.par

userid=zzzzzz/xxxxxx

commit=y –开启批量提交,避免长事务

ignore=y –如果目标表已经存在,只导入数据

fromuser=zhangzj

touser=zzzzzz

tables=yz_ongimt_jingtzt

file=exp0208.dmp

log=imp0208.log

buffer=100000 –大小控制导入速度的,设置过大会导致日志产生很快

 

imp parfile=imp_ws0208.par –进行数据导入

 

注意上面的fromuser和touser。如果将表导入到两个schema:zzzzzz,yyyyy

需要按照这种格式配置参数:

fromuser和touser一一对应,即使导出时只有一个schema.

fromuser=zhangzj,zhangzj

touser=zzzzzz,yyyyy

1

2

 

b) exp导出数据时,检查exp的日志,如果报错,一般是参数配置错误,参考官方文档调整参数。

c) imp导入数据过程,需要监控下数据库事务和日志产生速度。

d) 对导入的表收集统计信息。

3. 验证方案

对比exp、imp的日志,确认导出导入数据量是否一致。并在数据库上检查数据量。

比如上面的数据迁移,检查数据量跟日志显示是否一致。

select count(*) from zzzzzz.yz_ongimt_jingtzt;

跨schema或者数据库迁移数据时,除检查日志外,还需要检查源和目标的对象数据量、

是否有失效对象。

select object_type,count(*) from dba_objects where owner=’源schema’;

select object_type,count(*) from dba_objects where owner=’目标schema’;

select * from dba_objects where status<>’VALID’ and owner=’ 目标schema’;

五、 核心对象风险

由于核心表访问、变更频繁,不宜直接使用imp对核心表大量导入数据。

六、 回退方案

exp对应用无影响,不需要回退。

imp后可能数据有误,需要进行回退操作。

如果目标表本来就是空表,跟应用确认后,直接清空即可。

如果目标表原有数据,跟应用确认是否使用原有备份数据进行恢复。若需要,先exp备份当前数据,然后清空再导入前面的备份数据。

七、 历史故障及教训

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓