第一篇《Oracle 数据泵全解析:高效数据导出与导入》(Data Pump)

《Oracle 数据迁移与备份系列》

第一篇:《Oracle 数据泵全解析:高效数据导出与导入》(Data Pump)

oracle数据泵(Data Pump)是一个用于数据库数据导入导出的工具,由oracle自带,操作比较简单。

此方法适用于数据的逻辑备份和跨版本迁移。

基础

核心组件

  • expdp :导出工具(Data Pump Export)。用于将数据从 Oracle 数据库导出到 .dmp 文件中。

  • impdp :导入工具(Data Pump Import)。用于从 .dmp 文件导入数据到数据库。

实战

数据导出(Export)

1.事前准备
创建目录对象(Directory)
sql 复制代码
CREATE  DIRECTORY 目录对象名称 AS '操作系统目录路径';
赋予权限

在创建过文件后,用户一般不能直接使用,要为其赋予读写权限。

sql 复制代码
GRANT read, write ON DIRECTORY 目录对象名称 TO 用户名称;
2.执行导出命令(expdp)
sql 复制代码
expdp 用户名/密码@数据库服务名 参数1=值1 参数2=值2 ...
常规参数
常规参数 说明
用户名/密码 需要导出数据的数据库用户 必写
@数据库服务名 连接到的 Oracle 数据库 必写
directory=目录对象名 指定数据泵目录(如 DATA_PUMP_DIR 必写
dumpfile=文件名.dmp 导出数据文件的名称 必写
logfile=日志文件.log 记录导出过程的日志文件 必写
其他参数 可选,用于控制导出内容
特殊参数与场景
1.全库导出
**sql 复制代码
expdp 用户名/密码@数据库 full=y directory=目录对象名 dumpfile=文件名.dmp logfile=日志文件.log
  • 参数: full=y

  • **作用:**导出整个数据库。

2.按模式(用户)导出
sql 复制代码
expdp 用户名/密码@数据库 schemas=用户1 directory=目录对象名 dumpfile=文件名.dmp logfile=日志文件.log
  • 参数: schemas=用户1
  • 作用: 仅导出 用户1 用户下的所有对象。
3.按表导出
sql 复制代码
expdp 用户名/密码@数据库 tables=表1 directory=目录对象名 dumpfile=文件名.dmp logfile=日志文件.log
  • tables=表1 仅导出 表1。

  • tables=表1,表2...可导出多个表。

4.按条件导出
sql 复制代码
expdp 用户名/密码@数据库 tables=表1 directory=目录对象名 dumpfile=文件名.dmp logfile=日志文件.log query="WHERE id=10"
  • 参数: query="WHERE id=10"

  • 作用: 仅导出 id=10 的数据。

  • 注意: query必须在tables参数后面。

数据导入(Impdp

1.事前准备
确保dump文件的存在

数据导入的基础就是拥有数据导出产生的dump文件。

创建目录对象(Directory)
sql 复制代码
CREATE DIRECTORY 目录对象名称 AS '操作系统目录路径';
赋予权限

在创建过文件后,用户一般不能直接使用,要为其赋予读写权限。

sql 复制代码
GRANT read, write ON DIRECTORY 目录对象名称 TO 用户名称;
其他准备
  • 若导入用户与原用户不同,需提前创建目标用户并授权:

    sql 复制代码
    CREATE USER 新用户 IDENTIFIED BY 密码;
    GRANT CONNECT, RESOURCE TO 新用户;
  • 检查目标库字符集是否与导出文件兼容:

    sql 复制代码
    SELECT * FROM nls_database_parameters WHERE parameter LIKE '%CHARACTERSET%';
2.执行导入命令(Impdp)
sql 复制代码
impdp 用户名/密码@数据库服务名 参数1=值1 参数2=值2 ...
常规参数
参数 说明
用户名/密码 目标库用户(需有 IMP_FULL_DATABASE 权限处理全库导入) 必写
@数据库服务名 目标 Oracle 数据库实例 必写
directory=目录对象名 存放导出文件的目录(需与导出时一致,如 DATA_PUMP_DIR 必写
dumpfile=文件名.dmp 导出文件的名称(支持通配符 %U 多文件导入) 必写
logfile=日志文件.log 记录导入过程的日志文件 必写
table_exists_action 表已存在时的处理方式(SKIPAPPENDTRUNCATEREPLACE
特殊参数与场景
1. 全库导入
复制代码
impdp 用户名/密码@数据库 full=y directory=目录对象名 dumpfile=full_db.dmp logfile=imp_full.log
  • 参数: full=y
  • 要求 :用户需有 IMP_FULL_DATABASE 权限。
  • 注意:目标库需与源库字符集兼容。
2. 按模式(用户)导入
  • 导入到同名用户

    sql 复制代码
    impdp 用户名/密码@数据库 schemas=用户1 directory=目录对象名 dumpfile=user1.dmp logfile=imp_user1.log
  • 跨用户导入(映射用户):

    sql 复制代码
    impdp 用户名/密码@数据库 directory=目录对象名 dumpfile=user1.dmp remap_schema=用户1:用户2 logfile=imp_user2.log
    • remap_schema=原用户:目标用户:将数据从 用户1 映射到 用户2
3. 按表导入
sql 复制代码
impdp 用户名/密码@数据库 tables=表1 directory=目录对象名 dumpfile=tables.dmp logfile=imp_tables.log
  • 支持多表tables=表1,表2,表3
  • 处理表冲突 :添加 table_exists_action=replace 覆盖原表。
4. 按条件导入
sql 复制代码
impdp 用户名/密码@数据库 tables=表1 directory=目录对象名 dumpfile=data.dmp query=表1:"WHERE id=10" logfile=imp_filter.log
  • 用途 :仅导入 表1id=10 的数据。
  • 注意 :表必须已存在,否则需先导入表结构(使用 CONTENT=METADATA_ONLY)。
相关推荐
袋鼠云数栈5 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
ACP广源盛139246256735 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛139246256736 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
倔强的石头_7 小时前
事务边界与批量写入:避免长事务、锁等待和日志压力
数据库
努力努力再努力wz7 小时前
【Redis入门系列】从 KEYS 到 SCAN:渐进式遍历、Cursor 与位反转原理
数据库·redis·缓存
坐吃山猪8 小时前
【多线程】Lock与Condition
大数据·数据库
Lightpwd9 小时前
Spring Boot 多数据源落地:AbstractRoutingDataSource + 注解切面(附源码)
数据库·后端
LabVIEW开发9 小时前
LabVIEW 64位安装的位深陷阱:工具包、内存与工程兼容
数据库·labview·labview知识·labview功能·labview程序
寺中人9 小时前
MySQL 8.0 Windows 完整安装教程:环境配置、密码重置与常见报错排查
数据库·windows·mysql·环境搭建·mysql 安装
这个DBA有点耶9 小时前
同样48核配置TPS差1倍?高性价比数据库一体机的“软硬协同”才是分水岭
服务器·数据库·架构