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.dmpCOMPRESSION=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.logREMAP_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/pump2. 表空间不一致——导入时表空间不存在
用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可传输表空间迁移对比。