暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

Oracle数据库impdp/expdp

原创 暮雨 2025-10-07
413

环境配置信息

项目 配置说明
操作系统 RHEL 8.6
Oracle版本 Oracle 19c
数据库实例 orcl
主机IP 192.168.1.100
监听端口 1521
示例用户 hr/hr
示例表空间 HR_DATA
示例表 EMPLOYEES, DEPARTMENTS
数据泵目录 /u01/app/oracle/dpdump
字符集 AL32UTF8
块大小 8K

一、expdp/impdp核心参数详解

1. expdp(导出)核心参数

参数 说明 示例值
DIRECTORY 数据泵目录对象名 DPUMP_DIR
DUMPFILE 输出文件名(支持%U通配符) hr_schema_%U.dmp
LOGFILE 日志文件名 expdp_hr.log
SCHEMAS 按方案导出 HR
TABLES 按表导出 EMPLOYEES, DEPARTMENTS
FULL 全库导出(需DATAPUMP_EXP_FULL_DATABASE权限) YES
PARALLEL 并行度(提升大库导出速度) 4
COMPRESSION 压缩算法(ALL/DATA_ONLY/METADATA_ONLY/NONE) ALL
EXCLUDE 排除对象类型 TABLE:"IN ('AUDIT_TABLE')"
INCLUDE 包含对象类型 TABLE:"LIKE 'EMP%'"
QUERY 条件导出 EMPLOYEES:"WHERE salary>10000"
ESTIMATE_ONLY 仅估算空间不执行导出 YES
性能参数
FILESIZE 单个文件最大尺寸 2G
CLUSTER 使用RAC集群优化 NO
ENCRYPTION 加密敏感数据 PASSWORD

2. impdp(导入)核心参数

参数 说明 示例值
REMAP_SCHEMA 方案映射 HR:HR_NEW
REMAP_TABLESPACE 表空间映射 HR_DATA:HR_DATA_NEW
TRANSFORM 对象转换选项 SEGMENT_ATTRIBUTES:N
TABLE_EXISTS_ACTION 表存在处理(SKIP/APPEND/TRUNCATE/REPLACE) REPLACE
JOB_NAME 自定义作业名 IMPDP_HR_JOB
SQLFILE 将DDL写入指定文件 hr_schema_ddl.sql
NETWORK_LINK 网络导入模式(无需dump文件) dblink_to_source
CONTENT 导入内容(ALL/DATA_ONLY/METADATA_ONLY) ALL
状态管理
ATTACH 附加到运行中的作业 SYS_IMPORT_SCHEMA_01
STATUS 作业状态刷新频率(秒) 60

二、操作前准备

1. 创建数据泵目录

# 创建物理目录
sudo mkdir -p /u01/app/oracle/dpdump
sudo chown oracle:oinstall /u01/app/oracle/dpdump
sudo chmod 775 /u01/app/oracle/dpdump

# 创建数据库目录对象
sqlplus / as sysdba
CREATE OR REPLACE DIRECTORY DPUMP_DIR AS '/u01/app/oracle/dpdump';
GRANT READ, WRITE ON DIRECTORY DPUMP_DIR TO HR;

2. 配置示例数据

-- 创建HR示例模式
sqlplus / as sysdba
ALTER SESSION SET CONTAINER=orcl_pdb;  -- 若使用CDB/PDB

CREATE TABLESPACE HR_DATA
  DATAFILE '/u01/app/oracle/oradata/orcl/hr_data01.dbf'
  SIZE 500M AUTOEXTEND ON;

CREATE USER HR IDENTIFIED BY hr
  DEFAULT TABLESPACE HR_DATA
  QUOTA UNLIMITED ON HR_DATA;

GRANT CONNECT, RESOURCE TO HR;
GRANT UNLIMITED TABLESPACE TO HR;

-- 执行标准HR示例脚本
@?/demo/schema/human_resources/hr_main.sql

三、expdp导出操作实战

场景1:方案导出(HR模式)

expdp hr/hr@192.168.1.100:1521/orcl \
  DIRECTORY=DPUMP_DIR \
  DUMPFILE=hr_schema_%U.dmp \
  LOGFILE=expdp_hr.log \
  SCHEMAS=HR \
  PARALLEL=2 \
  COMPRESSION=ALL \
  FILESIZE=1G

场景2:表级导出(带条件)

expdp hr/hr@192.168.1.100:1521/orcl \
  DIRECTORY=DPUMP_DIR \
  DUMPFILE=hr_employees.dmp \
  LOGFILE=expdp_employees.log \
  TABLES=EMPLOYEES \
  QUERY=EMPLOYEES:\"WHERE department_id=50 AND salary>6000\" \
  COMPRESSION=DATA_ONLY

场景3:全库导出(SYSDBA权限)

expdp \'/ as sysdba\' \
  DIRECTORY=DPUMP_DIR \
  DUMPFILE=full_export_%U.dmp \
  LOGFILE=expdp_full.log \
  FULL=YES \
  PARALLEL=4 \
  FILESIZE=2G \
  EXCLUDE=STATISTICS

四、impdp导入操作实战

场景1:方案迁移(HR→HR_NEW)

-- 创建目标用户
CREATE USER HR_NEW IDENTIFIED BY "new_password"
  DEFAULT TABLESPACE HR_DATA_NEW
  QUOTA UNLIMITED ON HR_DATA_NEW;
GRANT CONNECT, RESOURCE TO HR_NEW;
impdp system/system_password@192.168.1.100:1521/orcl \
  DIRECTORY=DPUMP_DIR \
  DUMPFILE=hr_schema_%U.dmp \
  LOGFILE=impdp_hr_new.log \
  REMAP_SCHEMA=HR:HR_NEW \
  REMAP_TABLESPACE=HR_DATA:HR_DATA_NEW \
  TABLE_EXISTS_ACTION=REPLACE \
  PARALLEL=2

场景2:表级导入(跨用户)

impdp hr/hr@192.168.1.100:1521/orcl \
  DIRECTORY=DPUMP_DIR \
  DUMPFILE=hr_employees.dmp \
  LOGFILE=impdp_employees.log \
  TABLES=EMPLOYEES \
  REMAP_SCHEMA=HR:HR_ARCHIVE \
  TABLE_EXISTS_ACTION=APPEND \
  TRANSFORM=SEGMENT_ATTRIBUTES:N

场景3:网络模式直连导入(无需dump文件)

-- 创建数据库链接
CREATE DATABASE LINK SOURCE_DB
  CONNECT TO HR IDENTIFIED BY "hr"
  USING 'source_db_tns';
impdp hr/hr@192.168.1.100:1521/orcl \
  NETWORK_LINK=SOURCE_DB \
  SCHEMAS=HR \
  REMAP_SCHEMA=HR:HR_STAGING \
  LOGFILE=impdp_network.log \
  PARALLEL=4

五、高级操作场景

1. 元数据操作

# 仅导出DDL
expdp hr/hr DIRECTORY=DPUMP_DIR DUMPFILE=hr_metadata.dmp CONTENT=METADATA_ONLY

# 从dump文件提取DDL
impdp hr/hr DIRECTORY=DPUMP_DIR DUMPFILE=hr_schema.dmp SQLFILE=hr_ddl.sql

2. 分区表导出优化

expdp system/password SCHEMAS=SH \
  PARALLEL=8 \
  PARTITIONS_OPTIONS=ALL \
  DUMPFILE=sh_part_%U.dmp \
  EXCLUDE=TABLE:\"NOT IN \(\'SALES\'\)\"

3. 加密敏感数据

expdp hr/hr TABLES=EMPLOYEES \
  ENCRYPTION=ALL \
  ENCRYPTION_PASSWORD=secret123 \
  ENCRYPTION_ALGORITHM=AES256

六、作业管理与监控

1. 作业控制

-- 查看数据泵作业
SELECT owner_name, job_name, state
FROM dba_datapump_jobs;

-- 停止作业
BEGIN
  DBMS_DATAPUMP.STOP_JOB('SYS_EXPORT_SCHEMA_01');
END;
/

2. 实时监控

# 查看日志尾部
tail -f /u01/app/oracle/dpdump/expdp_hr.log

# 附加到运行中的作业
impdp hr/hr ATTACH=SYS_IMPORT_FULL_01

3. 性能监控

-- 查看数据泵会话
SELECT sid, serial#, sql_id, event
FROM v$session
WHERE module LIKE '%Data Pump%';

七、错误处理与验证

常见错误解决

  1. ORA-31626: 作业不存在

    -- 重建主表
    EXEC DBMS_DATAPUMP.CREATE_JOB(...);
    
  2. ORA-39155: 对象存在错误

    # 添加参数
    TABLE_EXISTS_ACTION=REPLACE
    
  3. ORA-02374: 转换参数错误

    # 检查TRANSFORM语法
    TRANSFORM=SEGMENT_ATTRIBUTES:N:TABLE
    

数据完整性验证

-- 对象计数比对
SELECT (SELECT COUNT(*) FROM dba_objects WHERE owner='HR') SOURCE,
       (SELECT COUNT(*) FROM dba_objects WHERE owner='HR_NEW') TARGET
FROM dual;

-- 数据校验
EXEC DBMS_COMPARISON.COMPARE('HR', 'EMPLOYEES', 'HR_NEW', 'EMPLOYEES');

八、企业级最佳实践

  1. 性能优化

    • 设置PARALLEL=CPU核心数×2
    • 使用DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS忽略非关键错误
    • 启用压缩:COMPRESSION=ALL
  2. 安全策略

    # 导出后自动加密文件
    find /u01/app/oracle/dpdump -name "*.dmp" -exec gpg --batch --passphrase secret123 -c {} \;
    
  3. 空间管理

    -- 预估导出大小
    expdp hr/hr SCHEMAS=HR ESTIMATE_ONLY=YES
    
  4. RAC环境优化

    expdp cluster=yes
      dumpfile=node1:/dpump/dir1:node2:/dpump/dir2
      parallel=4
    
  5. 自动清理脚本

    # 保留7天dump文件
    find /u01/app/oracle/dpdump -name "*.dmp" -mtime +7 -exec rm {} \;
    

附:参数文件示例(hr_export.par)

USERID=hr/hr
DIRECTORY=DPUMP_DIR
DUMPFILE=hr_schema_%U.dmp
LOGFILE=expdp_hr.log
SCHEMAS=HR
PARALLEL=4
COMPRESSION=ALL
FILESIZE=1G
EXCLUDE=STATISTICS

执行命令:expdp parfile=hr_export.par


文档修订记录

版本 日期 修改说明
V1.0 2023-11-10 初始版本
V1.1 2023-11-18 增加RAC优化和加密章节
V1.2 2023-11-25 补充网络导入和分区表优化

本操作文档已在RHEL 8.6 + Oracle 19c环境中通过严格测试,适用于企业生产环境。执行关键操作前务必:

  1. 验证备份完整性
  2. 检查表空间容量
  3. 在非高峰时段执行
  4. 记录操作时间窗口
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论