Oracle 数据库导出与导入操作指南
expdp/impdp 是推荐的数据迁移工具模式重映射功能 (remap_schema) 常用于版本升级注意区分全库导出与用户级导出的参数差异希望这篇指南能帮助您高效完成数据库迁移工作!
·
文章目录
Oracle数据库导出与导入操作全指南
一、导出与导入的核心意义
Oracle数据库的导出(Export)与导入(Import)是通过逻辑备份实现数据迁移、恢复或归档的关键操作,主要应用于以下场景:
- 数据迁移:跨数据库版本、跨平台迁移数据。
- 数据归档:定期备份历史数据并清理生产库。
- 故障恢复:快速恢复误删表或数据。
- 测试环境构建:复制生产数据到测试环境。
二、Oracle导出与导入工具概述
1. 传统工具:exp/imp
- 特点:
- 适用于Oracle 10g之前的版本。
- 导出文件为二进制格式(.dmp)。
- 语法简单但功能有限,逐渐被数据泵替代。
2. 数据泵工具:expdp/impdp
- 特点:
- Oracle 10g及以上版本推荐工具。
- 支持并行操作、压缩、加密等高级功能。
- 基于服务端运行,性能更高。
3. 物理备份工具:RMAN
- 特点:
- 物理备份数据库文件(数据文件、控制文件)。
- 支持全量/增量备份,需与逻辑备份结合使用。
三、数据泵(expdp/impdp)操作详解
1. 数据泵导出(expdp)
1.1 基本语法
expdp <用户名>/<密码> DIRECTORY=<目录对象名> DUMPFILE=<导出文件名> SCHEMAS=<模式名>
1.2 常用参数
| 参数 | 说明 |
|---|---|
DIRECTORY |
指定导出文件的存储目录(需预先创建) |
DUMPFILE |
导出文件名(如mydb.dmp) |
SCHEMAS |
导出指定用户模式(如SCHEMAS=hr,scott) |
TABLES |
导出指定表(如TABLES=hr.employees) |
FULL |
全库导出(FULL=YES) |
PARALLEL |
并行度(如PARALLEL=4) |
COMPRESSION |
压缩导出文件(COMPRESSION=ALL) |
1.3 示例
- 导出单个用户模式:
expdp hr/hr DIRECTORY=dpump_dir DUMPFILE=hr_schema.dmp SCHEMAS=hr - 导出指定表:
expdp hr/hr DIRECTORY=dpump_dir DUMPFILE=hr_employees.dmp TABLES=employees
2. 数据泵导入(impdp)
2.1 基本语法
impdp <用户名>/<密码> DIRECTORY=<目录对象名> DUMPFILE=<导出文件名> REMAP_SCHEMA=<原用户:目标用户>
2.2 常用参数
| 参数 | 说明 |
|---|---|
REMAP_SCHEMA |
用户映射(如REMAP_SCHEMA=hr:hr_new) |
REMAP_TABLESPACE |
表空间映射(如REMAP_TABLESPACE=users:users_new) |
TABLE_EXISTS_ACTION |
表存在时的操作(SKIP/APPEND/REPLACE/TRUNCATE) |
EXCLUDE |
排除对象(如EXCLUDE=TABLE:"IN ('TEMP')") |
2.3 示例
- 导入用户模式并映射到新用户:
impdp system/oracle DIRECTORY=dpump_dir DUMPFILE=hr_schema.dmp REMAP_SCHEMA=hr:hr_new - 导入指定表并追加数据:
impdp hr/hr DIRECTORY=dpump_dir DUMPFILE=hr_employees.dmp TABLES=employees TABLE_EXISTS_ACTION=APPEND
四、目录对象与权限配置
1. 创建目录对象
CREATE DIRECTORY dpump_dir AS '/u01/app/oracle/dpump';
2. 授权用户访问权限
GRANT READ, WRITE ON DIRECTORY dpump_dir TO hr;
五、高级功能与性能优化
1. 并行导出与导入
- 设置并行度:
expdp hr/hr DIRECTORY=dpump_dir DUMPFILE=hr_parallel_%U.dmp SCHEMAS=hr PARALLEL=4%U表示生成多个文件(如hr_parallel_01.dmp,hr_parallel_02.dmp)。
2. 压缩与加密
- 压缩导出文件:
expdp hr/hr DIRECTORY=dpump_dir DUMPFILE=hr_compressed.dmp COMPRESSION=ALL - 加密敏感数据:
expdp hr/hr DIRECTORY=dpump_dir DUMPFILE=hr_encrypted.dmp ENCRYPTION_PASSWORD=mykey
3. 网络模式导出/导入
- 直接跨数据库迁移:
impdp hr/hr NETWORK_LINK=source_db DIRECTORY=dpump_dir SCHEMAS=hrsource_db为预先创建的数据库链接。
六、典型场景与解决方案
| 场景 | 操作步骤 | 注意事项 |
|---|---|---|
| 跨版本迁移(11g → 19c) | 使用数据泵导出,设置VERSION=12兼容低版本 |
检查对象兼容性(如XMLType字段) |
| 恢复误删表 | 从备份DMP文件中导入指定表 | 使用TABLE_EXISTS_ACTION=REPLACE |
| 数据归档 | 导出历史表并清理生产库 | 结合分区表(Partitioning)减少锁竞争 |
七、常见问题与解决方法
1. 错误:ORA-39002: invalid operation
- 原因:目录对象权限不足或路径不存在。
- 解决:
GRANT READ, WRITE ON DIRECTORY dpump_dir TO hr;
2. 错误:ORA-31655: no data or metadata objects selected
- 原因:导出过滤条件过于严格(如
EXCLUDE误用)。 - 解决:检查
TABLES、SCHEMAS参数是否匹配实际对象。
3. 错误:ORA-02374: conversion error loading data
- 原因:字符集不一致(源库与目标库NLS_LANG设置不同)。
- 解决:
# 设置环境变量 export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
八、最佳实践与总结
1. 备份策略建议
- 定期全量导出:每周全量导出关键用户模式。
- 增量导出:每日导出增量变更(结合
FLASHBACK_TIME)。 - 验证备份:定期执行测试恢复流程。
2. 性能优化总结
- 并行操作:根据CPU核心数设置
PARALLEL参数。 - 压缩与分片:减少I/O压力,加速传输。
- 网络模式:避免中间文件,直接跨库迁移。
3. 关键注意事项
- 权限管理:确保用户拥有目录对象读写权限。
- 字符集一致:源库与目标库NLS_LANG需匹配。
- 日志监控:通过
LOGFILE参数记录操作日志。
附录:常用命令速查表
# 导出全库
expdp system/oracle DIRECTORY=dpump_dir DUMPFILE=full.dmp FULL=YES
# 导入全库
impdp system/oracle DIRECTORY=dpump_dir DUMPFILE=full.dmp FULL=YES
# 导出指定表空间
expdp system/oracle DIRECTORY=dpump_dir DUMPFILE=tbs_users.dmp TABLESPACES=users
# 查看导出文件内容
impdp system/oracle DIRECTORY=dpump_dir DUMPFILE=hr.dmp SQLFILE=hr_metadata.sql
实操示例
一、导出操作(expdp/exp)
使用 expdp 导出全库(普通用户模式)
# 导出全库(排除系统表)
expdp username/password directory=DATA_PUMP_DIR dumpfile=full_20230321.dmp logfile=expdp.log
导出指定用户对象
bash
# 导出指定用户所有对象
expdp sjk_190828/sjk_190828 \
directory=DATA_PUMP_DIR \
dumpfile=sjk_20200602.dmp \
logfile=exp_20200602.log
导出指定表(数据泵模式)
bash
expdp sjk_190828/sjk_190828 \
directory=DATA_PUMP_DIR \
dumpfile=sjk_20230313.dmp \
tables=('inv_sbpc') \
rows=n # 仅导出表结构
传统导出工具 exp
bash
# 导出指定表(兼容旧版本)
exp username/password@database \
file=/path/to/dump.dmp \
tables=('tab1','tab2') \
rows=y # 导出数据(默认)
二、导入操作(impdp)
基本导入(覆盖已存在表)
impdp username/password@target_db \
directory=DATA_PUMP_DIR \
dumpfile=sjk_20230321.dmp \
table_exists_action=replace
模式重映射(用户迁移)
impdp sjk_230315/sjk@target_db \
directory=DATA_PUMP_DIR \
dumpfile=sjk_20230321.dmp \
remap_schema=sjk_190828:sjk_230315
数据泵导入注意事项
确保目标库已创建同名用户
提前创建 DATA_PUMP_DIR 目录
检查权限:
grant imp_full_database to username;
三、文件管理与传输
查找 dmp 文件
# 在Linux系统查找文件
find / -name 'sjk_20200602.dmp'
下载文件(SecureCRT 等工具)
bash
# 进入目标目录
cd /home/work/data/oracle/u01/app/oracle/admin/zssd/dpdump
# 使用sz命令下载
sz sjk_20230306.dmp
四、环境配置检查
查看数据泵目录
以sysdba身份登录检查
sqlplus / as sysdba
SELECT directory_path
FROM dba_directories
WHERE directory_name = 'DATA_PUMP_DIR'
AND owner = 'SYS';
典型目录路径示例
Linux: /u01/app/oracle/admin/实例名/dpdump/
Windows: E:\app\PC\admin\orcl\dpdump\
五、常见问题
权限问题
普通用户需授予 exp_full_database 权限
避免使用 AS SYSDBA 登录(非系统用户)
路径配置
确保导出 / 导入目录一致
跨平台注意路径格式差异(Windows 反斜杠转义)
数据一致性
导出前执行
ALTER TABLESPACE READ ONLY
大表建议分批次导出
更多推荐




所有评论(0)