第一篇《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)。
相关推荐
feifeigo12319 分钟前
升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
数据库·mysql·adb
火龙谷2 小时前
【nosql】有哪些非关系型数据库?
数据库·nosql
焱焱枫3 小时前
Oracle获取执行计划之10046 技术详解
数据库·oracle
qq_392397124 小时前
Redis常用操作
数据库·redis·wpf
一只fish6 小时前
MySQL 8.0 OCP 1Z0-908 题目解析(17)
数据库·mysql
花好月圆春祺夏安6 小时前
基于odoo17的设计模式详解---装饰模式
数据库·python·设计模式
A__tao6 小时前
SQL 转 Java 实体类工具
java·数据库·sql
m0_653031367 小时前
腾讯云认证考试报名 - TDSQL数据库交付运维专家(TCCE PostgreSQL版)
运维·数据库·腾讯云
小马哥编程7 小时前
【iSAQB软件架构】架构决策记录-ADR
数据库·架构·系统架构·设计规范
萧鼎8 小时前
深度探索 Py2neo:用 Python 玩转图数据库 Neo4j
数据库·python·neo4j