当前位置:首页 > 数据库 > 正文

oracle怎么导出数据库

使用 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 权限,目标目录需预先创建。

oracle怎么导出数据库  第1张

▶️ 基础语法

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小时)

典型操作示例

  1. 全库导出(需 DBA 权限):
    expdp system/password@orcl DIRECTORY=dpump_dir DUMPFILE=full_db.dmp FULL=Y PARALLEL=8 COMPRESSION=ALL
  2. 按模式导出(仅限当前用户拥有的模式):
    expdp scott/tiger@orcl DIRECTORY=dpump_dir SCHEMAS=SCOTT,HR DUMPFILE=app_schemas.dmp
  3. 按表导出
    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)。
步骤

  1. 预处理:在生产库创建专用目录并授权:
    CREATE DIRECTORY migr_dir AS '/u01/migration/';
    GRANT READ,WRITE ON DIRECTORY migr_dir TO dba_user;
  2. 导出命令
    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开头的表
  3. 验证日志:检查 orders_export.log 确认无 ORA-39173(对象冲突)错误。
  4. 导入测试库:使用 impdp 并指定 VERSION=12.1 实现版本回退。

相关问答 FAQs

Q1: 执行 expdp 时报 “ORA-39083: directory name is invalid” 如何解决?

A:此错误表明指定的目录未在数据库中注册或权限不足,解决步骤:

  1. 确认物理目录存在且具有读写权限:ls -ld /path/to/directory
  2. 登录 SQLPlus 执行:
    CREATE OR REPLACE DIRECTORY my_dir AS '/absolute/path';
    GRANT READ,WRITE ON DIRECTORY my_dir TO your_user;
  3. 确保 expdp 命令中使用的目录名与数据库中的别名一致。

Q2: 如何将导出的 .dmp 文件导入到另一个数据库?

A:使用 impdp 工具,基本命令如下:

impdp system/password@target_db DIRECTORY=source_dir 
  DUMPFILE=backup.dmp 
  SCHEMAS=原有模式 
  REMAP_SCHEMA=原模式=新模式 -可选重命名模式

关键点

  • 确保目标库已创建对应的表空间和用户。
  • 若涉及不同字符集,需添加 CHARACTERSET=目标字符集
  • 大数据量时建议设置 PARALLEL=4 加速导入。
0