环境配置信息
| 项目 | 配置说明 |
|---|---|
| 操作系统 | 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%';
七、错误处理与验证
常见错误解决
ORA-31626: 作业不存在
-- 重建主表 EXEC DBMS_DATAPUMP.CREATE_JOB(...);ORA-39155: 对象存在错误
# 添加参数 TABLE_EXISTS_ACTION=REPLACEORA-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');
八、企业级最佳实践
性能优化
- 设置
PARALLEL=CPU核心数×2 - 使用
DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS忽略非关键错误 - 启用压缩:
COMPRESSION=ALL
- 设置
安全策略
# 导出后自动加密文件 find /u01/app/oracle/dpdump -name "*.dmp" -exec gpg --batch --passphrase secret123 -c {} \;空间管理
-- 预估导出大小 expdp hr/hr SCHEMAS=HR ESTIMATE_ONLY=YESRAC环境优化
expdp cluster=yes dumpfile=node1:/dpump/dir1:node2:/dpump/dir2 parallel=4自动清理脚本
# 保留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环境中通过严格测试,适用于企业生产环境。执行关键操作前务必:
- 验证备份完整性
- 检查表空间容量
- 在非高峰时段执行
- 记录操作时间窗口
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




