上一篇
oracle怎么导出数据库
- 数据库
- 2025-08-14
- 5
使用 expdp 命令 导出: expdp username/password@db schemas=SCHEMA_NAME dumpfile=backup.dmp logfile=export.log,需提前创建目录对象并授权
以下是针对 Oracle 数据库导出 的完整操作指南,包含多种常用方法、详细步骤、关键参数说明及典型场景示例,帮助您高效完成数据导出任务。

核心导出工具概览
| 工具名称 | 适用场景 | 特点 | 推荐程度 |
|---|---|---|---|
| exp/imp | 旧版客户端(pre-10g) | 功能简单但已过时,不支持并行操作 | ️ 低 |
| expdp/impdp | 新版 Data Pump(默认推荐) | 高性能、支持并行、跨平台兼容性强 | 高 |
| SQLLoader | 文本文件反向导入 | 需配合控制文件定义字段映射规则 | 特定需求 |
| 第三方工具 | 图形化界面(如 DBeaver、Toad) | 可视化操作,适合非技术人员 | ️ 可选 |
主流导出方法详解
方法一:通过 Data Pump (expdp) 导出(推荐)
适用场景:全库/模式/表级导出、大数据量、跨版本迁移
前置条件:需具备 CREATE JOB 权限,目标目录需预先创建。
▶️ 基础语法
expdp [用户名]/[密码]@[连接串] DIRECTORY=目录路径 SCHEMAS=模式名 [附加参数]
关键参数解析
| 参数 | 说明 | 示例值 |
|---|---|---|
| DIRECTORY=dpump_dir | 指定存储转储文件的 OS 目录(需提前创建并授权) | DATA_PUMP_DIR |
| SCHEMAS=schema_name | 按模式导出(可多选,逗号分隔) | SCOTT,HR |
| DUMPFILE=expfull.dmp | 自定义转储文件名 | backup_202406.dmp |
| LOGFILE=export.log | 记录日志文件路径 | /tmp/export_errors.log |
| PARALLEL=4 | 并行度(建议设置为 CPU 核心数的 2-4 倍) | 8 |
| COMPRESSION=METADATA_ONLY | 仅压缩元数据(平衡速度与空间) | ALL(全压缩,耗时更长) |
| FLASHBACK_TIME=SYSTIME-7 | 基于闪回查询导出历史数据(需启用闪回) | SYSTIME-24(过去24小时) |
典型操作示例
- 全库导出(需 DBA 权限): expdp system/password@orcl DIRECTORY=dpump_dir DUMPFILE=full_db.dmp FULL=Y PARALLEL=8 COMPRESSION=ALL
- 按模式导出(仅限当前用户拥有的模式): expdp scott/tiger@orcl DIRECTORY=dpump_dir SCHEMAS=SCOTT,HR DUMPFILE=app_schemas.dmp
- 按表导出: expdp scott/tiger@orcl DIRECTORY=dpump_dir TABLES=EMP,DEPT DUMPFILE=selected_tables.dmp
️ 高级配置技巧
- 增量导出:结合 RMAN 实现时间点恢复前的增量备份。
- 加密传输:通过 ENCRYPTION=PASSWORD=your_secret 对转储文件加密。
- 网络导出:将文件直接写入远程服务器(需配置共享存储)。
️ 方法二:传统 exp 工具导出(兼容旧系统)
适用场景:遗留系统维护、无 Data Pump 环境
限制:单进程运行,效率低于 expdp。

基本命令
exp [用户名]/[密码]@[连接串] FILE=导出文件.dmp FULL=Y OWNER=模式名
常用参数对照表
| exp 参数 | expdp 等效参数 | 作用 |
|---|---|---|
| FULL=Y | FULL=Y | 导出整个数据库 |
| OWNER=schema | SCHEMAS=schema | 按模式导出 |
| FILE=... | DUMPFILE=... | 指定转储文件 |
| GRANTS=Y | INCLUDE=GRANTS | 包含权限信息 |
| ROWS=Y | CONTENT=ALL | 导出数据而非仅结构 |
注意事项
- 若遇 ORA-39083 错误(目录不存在),需执行: CREATE OR REPLACE DIRECTORY dpump_dir AS '/path/to/directory'; GRANT READ,WRITE ON DIRECTORY dpump_dir TO public;
- 字符集不一致可能导致乱码,可通过 NLS_LANG=AMERICAN_AMERICA.AL32UTF8 强制指定客户端编码。
关键注意事项清单
| 风险项 | 解决方案 |
|---|---|
| 权限不足 | 确保用户拥有 CREATE JOB, READ ON DIRECTORY, EXECUTE ON DBMS_SCHEDULER |
| 磁盘空间不足 | 监控 DUMPFILE 所在分区的剩余空间,必要时分卷导出 |
| LOB 字段截断 | 添加 LARGEOBJECT_TERMINATE=YES 参数防止超长二进制字段被截断 |
| 跨平台字符集问题 | 统一源库和目标库的字符集(如均设为 AL32UTF8),使用 CHARACTERSET=UTF8 |
| 网络中断续传 | 启用 RESUMABLE=Y 参数,中断后可通过相同命令继续导出 |
| 版本向下兼容 | 高版本导出的文件无法直接导入低版本,需通过 VERSION=10.2 降级导出 |
实战案例:某电商系统迁移方案
背景:将生产环境(Oracle 19c)的订单模块迁移至测试环境(Oracle 12c)。
步骤:

- 预处理:在生产库创建专用目录并授权: CREATE DIRECTORY migr_dir AS '/u01/migration/'; GRANT READ,WRITE ON DIRECTORY migr_dir TO dba_user;
- 导出命令: expdp dba_user/pwd@prod DIRECTORY=migr_dir DUMPFILE=orders_module.dmp SCHEMAS=ORDERS,PRODUCTS,CUSTOMERS PARALLEL=6 COMPRESSION=METADATA_ONLY LOGFILE=orders_export.log INCLUDE=TABLE:"LIKE 'ORD%'" -仅导出以ORD开头的表
- 验证日志:检查 orders_export.log 确认无 ORA-39173(对象冲突)错误。
- 导入测试库:使用 impdp 并指定 VERSION=12.1 实现版本回退。
相关问答 FAQs
Q1: 执行 expdp 时报 “ORA-39083: directory name is invalid” 如何解决?
A:此错误表明指定的目录未在数据库中注册或权限不足,解决步骤:
- 确认物理目录存在且具有读写权限:ls -ld /path/to/directory。
- 登录 SQLPlus 执行: CREATE OR REPLACE DIRECTORY my_dir AS '/absolute/path'; GRANT READ,WRITE ON DIRECTORY my_dir TO your_user;
- 确保 expdp 命令中使用的目录名与数据库中的别名一致。
Q2: 如何将导出的 .dmp 文件导入到另一个数据库?
A:使用 impdp 工具,基本命令如下:
impdp system/password@target_db DIRECTORY=source_dir DUMPFILE=backup.dmp SCHEMAS=原有模式 REMAP_SCHEMA=原模式=新模式 -可选重命名模式
关键点:
- 确保目标库已创建对应的表空间和用户。
- 若涉及不同字符集,需添加 CHARACTERSET=目标字符集。
- 大数据量时建议设置 PARALLEL=4 加速导入。