04-expdp-impdp数据泵迁移实战
2026/7/26 9:11:40 网站建设 项目流程

expdp/impdp数据泵迁移实战——从11g到19c的社保数据迁移

社保系统从11g迁到19c,不是imp/exp这种古董工具能搞定的。数据泵(Data Pump)可以并行导出、按表过滤、跨版本迁移。这篇文章记录一次真实的数据泵迁移过程——从准备到验证全流程。

文章目录

  • expdp/impdp数据泵迁移实战——从11g到19c的社保数据迁移
    • 一、为什么不用 imp/exp
    • 二、创建导出目录
    • 三、导出命令
    • 四、导入命令
    • 五、监控导出进度
    • 六、跨版本兼容性
    • 七、常见坑
    • 八、迁移检查清单

一、为什么不用 imp/exp

特性旧版 imp/exp新版 expdp/impdp
执行位置客户端服务端(更接近磁盘)
并行度不支持支持多线程并行
网络传输不支持支持跨网络直接导入
大表处理容易内存溢出流式处理
粒度控制表级别支持排除对象、过滤条件

社保库GRJF表39MB、UNIT_PAYMENT45MB、PENSION_DETAIL94MB——用旧版 imp 导到一半就内存溢出,数据泵可以并行导出。


二、创建导出目录

-- 在源库创建目录对象(需要物理路径已存在)CREATEORREPLACEDIRECTORY dpump_dirAS'/data/pump';GRANTREAD,WRITEONDIRECTORY dpump_dirTOsystem;
mkdir-p/data/pumpchownoracle:oinstall /data/pump

三、导出命令

全库导出:

expdp system/密码@orcl\DIRECTORY=dpump_dir\DUMPFILE=full_%U.dmp\LOGFILE=exp_full.log\FULL=Y\PARALLEL=4\COMPRESSION=ALL
  • %U——自动编号,并行4线程生成 full_01.dmp 到 full_04.dmp
  • COMPRESSION=ALL——压缩数据和元数据,社保库约能压到原来的60%
  • PARALLEL=4——4线程并行,适合多核CPU

按 Schema 导出:

expdp system/密码@orcl\DIRECTORY=dpump_dir\DUMPFILE=schema_%U.dmp\SCHEMAS=\LOGFILE=exp_schema.log\PARALLEL=2

只导某些表:

expdp system/密码@orcl\DIRECTORY=dpump_dir\DUMPFILE=tables_%U.dmp\TABLES=PAYMENT_HISTORY,PERSON_INFO,UNIT_PAYMENT\LOGFILE=exp_tables.log

四、导入命令

全库导入:

# 先在目标库建表空间(路径要和源库一致或改造)impdp system/密码@orcl_new\DIRECTORY=dpump_dir\DUMPFILE=full_%U.dmp\LOGFILE=imp_full.log\FULL=Y\PARALLEL=4

表空间路径不同时的改造:

impdp system/密码@orcl_new\DIRECTORY=dpump_dir\DUMPFILE=full_%U.dmp\REMAP_TABLESPACE=OLD_TBS:NEW_TBS\REMAP_SCHEMA=OLD_USER:NEW_USER\LOGFILE=imp_remap.log

REMAP_TABLESPACE把源库表空间自动映射到目标库表空间,不用手动建表改DDL。


五、监控导出进度

-- 查看正在运行的JOBSELECTJOB_NAME,STATE,DEGREE,ATTACHED_SESSIONSFROMDBA_DATAPUMP_JOBS;-- 查看详细进度(%)SELECTOPNAME,TARGET,SOFAR,TOTALWORK,ROUND(SOFAR/TOTALWORK*100,2)ASPCTFROMV$SESSION_LONGOPSWHEREOPNAMELIKE'Data Pump%';

六、跨版本兼容性

操作说明
11g导出 → 19c导入用11g的expdp导出,19c的impdp导入,完全兼容
19c导出 → 11c导入用19c的expdp加VERSION=11.2参数
大版本跨度超过2个大版本建议用VERSION明确指定

七、常见坑

1. 目录权限问题——ORA-39002

# 确认目录存在且oracle用户有权限ls-la/data/pumpchmod750/data/pump

2. 表空间不一致——导入时表空间不存在

REMAP_TABLESPACE自动重映射,或在目标库先建同名表空间。

3. 大表导入慢

加大PARALLEL,但要确保CPU和IO扛得住。经验值:PARALLEL=CPU核数/2

4. 字符集不一致

-- 源库和目标库字符集必须一致,或目标库是源库的超集SELECT*FROMNLS_DATABASE_PARAMETERSWHEREPARAMETER='NLS_CHARACTERSET';

八、迁移检查清单

-- 导入后验证-- 对象数SELECTCOUNT(*)FROMDBA_OBJECTSWHEREOWNER='';-- 行数抽查SELECTCOUNT(*)FROMPAYMENT_HISTORY;SELECTCOUNT(*)FROMPERSON_INFO;-- 失效对象SELECTOBJECT_NAME,OBJECT_TYPEFROMDBA_OBJECTSWHEREOWNER=''ANDSTATUS='INVALID';-- 重新编译失效对象EXECUTL_RECOMP.RECOMP_SERIAL('');

✅ 亮点:社保系统实际迁移场景——表空间路径不一致、跨版本兼容、并行度调优——都给出了可复现的命令。扩展方向:expdp/impdp网络直传模式(NETWORK_LINK)、RMAN可传输表空间迁移对比。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询