上一篇
oracle怎么导出数据库
- 数据库
- 2025-08-14
- 1
使用
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
加速导入。