欢迎光临
我们一直在努力

04-expdp-impdp数据泵迁移实战

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_PAYMENT 45MB、PENSION_DETAIL 94MB——用旧版 imp 导到一半就内存溢出,数据泵可以并行导出。


二、创建导出目录

— 在源库创建目录对象(需要物理路径已存在)
CREATE OR REPLACE DIRECTORY dpump_dir AS '/data/pump';
GRANT READ, WRITE ON DIRECTORY dpump_dir TO system;

mkdir -p /data/pump
chown oracle: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。


五、监控导出进度

— 查看正在运行的JOB
SELECT JOB_NAME, STATE, DEGREE, ATTACHED_SESSIONS
FROM DBA_DATAPUMP_JOBS;

— 查看详细进度(%)
SELECT OPNAME, TARGET, SOFAR, TOTALWORK,
ROUND(SOFAR/TOTALWORK*100, 2) AS PCT
FROM V$SESSION_LONGOPS
WHERE OPNAME LIKE 'Data Pump%';


六、跨版本兼容性

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

七、常见坑

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

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

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

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

3. 大表导入慢

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

4. 字符集不一致

— 源库和目标库字符集必须一致,或目标库是源库的超集
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';


八、迁移检查清单

— 导入后验证
— 对象数
SELECT COUNT(*) FROM DBA_OBJECTS WHERE OWNER='';

— 行数抽查
SELECT COUNT(*) FROM PAYMENT_HISTORY;
SELECT COUNT(*) FROM PERSON_INFO;

— 失效对象
SELECT OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS
WHERE OWNER='' AND STATUS='INVALID';

— 重新编译失效对象
EXEC UTL_RECOMP.RECOMP_SERIAL('');


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

赞(0)
未经允许不得转载:171主机测评 » 04-expdp-impdp数据泵迁移实战
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址