oracle expdp迁移110G超大表
因项目需求需要迁移一个110G的超大业务表,110G是查的user_segments里的表和索引的大小?expdp是评估大小为374G?
在实际expdp的时候遇到很多问题,最后终于成功迁移。
导出数据库版本:12c Enterprise Edition Release 12.1.0.2.0
导入数据库版本:19c Enterprise Edition Release 19.0.0.0.0
第一次尝试:
直接用expdp加8个并行全量导出,超时报错快照过久,失败
expdp语句:expdp user_name/password directory=DUMPDIR tables=table_name dumpfile=table_name%U.dump logfile=table_name.log parallel=8
而且开了8个并行只生成了两个dump文件,一个超级大,另一个很小
第二次尝试:
因为另外有一个稍微小一点的表(60G),同样用expdp加8个并行全量导出,但是dump文件只指定了一个,可以成功导出,拿到目标环境也成功导入,所以这个110G的表业进行这样的尝试,还是超时报错快照过久,失败
expdp语句:
expdp user_name/password directory=DUMPDIR tables=table_name dumpfile=table_name.dump logfile=table_name.log parallel=8
(不是说文件数量要多余并行个数吗)
第三次尝试:
请教别人,用exp尝试,还是不行,跑两个小时就卡住不动了
第四次成功:
用expdp开8并行,同时把目标表数据4等分,用4个expdp同时导出,导入的时候也分别导入就ok了.
expdp语句:expdp user_name/password directory=DUMPDIR tables=table_name dumpfile=table_name.dump logfile=table_name.log parallel=8 query="where id >=44000000 and id <66500000"
impdp语句:impdp user_name/password directory=DUMPDIR table_exists_action=append remap_tablespace=a:b remap_schema=a:b dumpfile=table_name.dump logfile=table_name.log EXCLUDE=INDEX parallel=8
--EXCLUDE=INDEX 有多个impdp作业所以先不导入索引,等数据全部导入后再创建索引