当前位置: 首页 > backend >正文

oracle 导入导出 dmp 数据文件实战

一、DMP文件基础知识​​

1. ​​DMP文件定义​​

DMP(Data Pump Dump File)是Oracle数据库专用的二进制格式文件,由expdp/impdp或旧版exp/imp工具生成。它包含数据库对象的元数据(表结构、索引等)和实际数据,是数据备份、迁移和恢复的核心载体。

2. ​​DMP文件结构​​

  • ​​ 文件头​​:记录Oracle版本、字符集、导出时间等元信息。
  • ​​数据段​​:存储表数据,按数据块组织,支持并行读写。
  • ​​索引段​​:加速数据检索的索引信息,包含校验和等完整性标记。
  • ​​数据字典​​:定义表、视图、存储过程等对象的元数据。

3. ​核心功能​​

  • ​​全量备份​​:导出整个数据库或指定用户的所有对象。
  • ​​增量同步​​:仅导出变更数据,减少传输量(需结合日志)。
  • ​​跨平台迁移​​:支持不同Oracle版本、操作系统间的数据传输。

4. 生成工具​​

  • ​​传统工具​​:exp(导出)和imp(导入),适用于Oracle 10g及以下版本。
  • ​​数据泵工具​​:expdp和impdp,提供并行处理、压缩等高级特性(Oracle 10g+推荐)

二、DMP文件导出实战​​

1. ​​数据泵导出(expdp)​​

expdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=20250520_full.dmp logfile=export.log schemas=HR,SCOTT parallel=4 compression=all encryption=password:oracle123

​​关键参数​​:

  • directory:预先创建的Oracle目录对象(需关联物理路径)。
  • schemas:指定导出用户,多用户用逗号分隔。
  • parallel:并行线程数,提升大库导出速度。
  • compression:减少文件体积(可选all/data/metadata)。
  • encryption:加密保护敏感数据(支持密码或密钥)。

2. ​​传统导出(exp)​​

语法

exp system/password@ORCL file=/backup/legacy.dmp owner=HR buffer=102400 rows=y consistent=y

示例:

--导出指定表 USER_TEMP
exp PICP_FORMAL/MyPassword@ORCL file=D:\OracleDMP\test.dmp tables=(USER_TEMP)--导出整库
exp  PICP_FORMAL/MyPassword@ORCL file=D:\OracleDMP\test.dmp

​​适用场景​​:低版本数据库或简单备份需求。

三、DMP文件导入实战​​

1. ​​数据泵导入(impdp)​​

impdp system/password@NEWDB directory=DATA_PUMP_DIR dumpfile=20250520_full.dmp remap_schema=HR:NEW_HR remap_tablespace=USERS:NEW_USERS transform=segment_attributes:n exclude=statistics

​​关键参数​​:

  • directory:预先创建的Oracle目录对象(需关联物理路径)。
  • remap_schema:用户重映射(原用户→目标用户)。
  • remap_tablespace:调整表空间分配49。
  • transform:忽略存储参数冲突(如storage子句)。
  • exclude/include:过滤对象类型(如排除统计信息)。

2. ​​传统导入(imp)​​

imp system/password@NEWDB file=/backup/legacy.dmp fromuser=HR touser=NEW_HR ignore=y commit=y

​​注意事项​​:需手动创建目标用户和表空间。

1.核心参数说明

参数作用说明示例
USERID指定数据库连接凭证(格式:用户名/密码@服务名USERID=system/oracle@ORCL
FILE指定要导入的DMP文件路径FILE=/data/full.dmp
FULL全库导入(需IMP_FULL_DATABASE权限)FULL=Y
FROMUSER/TOUSER用户重定向(将原用户数据导入目标用户)FROMUSER=HR TOUSER=NEW_HR
TABLES指定导入的表(支持多表或分区表)TABLES=(EMP,DEPT)TABLES=(T1:P1,T1:P2)
ROWS是否导入数据行(默认Y导入数据,N仅导入结构)ROWS=N(仅导入DDL)
IGNORE忽略对象创建错误(如重复表/索引,默认N报错)IGNORE=Y(跳过冲突继续执行)
COMMIT提交频率(默认N批量提交,Y逐行提交)COMMIT=Y(适用于大事务回滚控制)
LOG指定日志文件路径LOG=/logs/imp.log
INDEXFILE将DDL语句写入指定文件(用于调试)INDEXFILE=ddl.sql

2. 高级参数扩展

​​​

参数​​适用场景
DESTROY=Y覆盖已有表空间文件(慎用)
GRANTS=N跳过权限导入(如仅需数据)
RECORDLENGTH=65535调整I/O缓冲区大小(优化大数据量导入性能)
PARFILE从参数文件读取配置(简化复杂命令)

3.传统导入(IMP)的三种模式​​

1. 完全导入模式(FULL=Y)​​

​​定义​​:导入整个DMP文件中的所有对象(用户、表、索引等)。
​​命令示例​​:

imp system/oracle@ORCL FILE=full.dmp FULL=Y IGNORE=Y LOG=imp_full.log

​​适用场景​​:数据库整体迁移或灾难恢复。
​​注意事项​​:

需提前创建目标库的表空间和用户
目标库字符集必须与DMP文件一致(通过NLS_LANG环境变量控制)

​​2. 用户模式导入(FROMUSER/TOUSER)​​

​​定义​​:将指定用户的数据导入到另一用户(支持跨用户映射)。
​​命令示例​​:

imp system/oracle@ORCL FILE=hr.dmp FROMUSER=HR TOUSER=NEW_HR LOG=imp_hr.log

适用场景​​:用户数据迁移或测试环境克隆。
​​注意事项​​:

目标用户需提前创建分配权限
若表空间不同需配合REMAP_TABLESPACE(仅数据泵支持,传统IMP需手动处理)

​​3. 表模式导入(TABLES=)​​

​​定义​​:选择性导入特定表或分区。
​​命令示例​​:

imp scott/tiger@ORCL FILE=emp.dmp TABLES=(EMP,DEPT) IGNORE=Y LOG=imp_tables.log

​​适用场景​​:局部数据恢复或表结构同步。
​​注意事项​​:

支持通配符%(如TABLES=(EMP%)导入EMP开头的表)
分区表需指定分区名(如TABLES=(SALES:Q1_2025))5

四、高级优化策略​​

1. ​​性能调优​​

​​并行处理​​:parallel=8(建议不超过CPU核心数)。
​​网络压缩​​:network_link=… compression=data(远程同步)。
​​分段导出​​:按表分区或日期范围分批操作。

2. ​​增量同步​​

​​策略选择​​:

  • ​​全量同步​​:首次迁移或数据一致性要求高时使用。
  • ​​增量同步​​:定期追加变更数据(需配合日志)。

​​代码示例​​:

expdp system/password@ORCL directory=dpump_dir dumpfile=incr_%U.dmp schemas=HR content=data_only query="WHERE update_time>SYSDATE-1"

五、问题总结

1. 通过 exp 命令导出,使用 impdp 命令无法导入;

Oracle 中 因为版本问题或命令问题处理时,我们要 查看原始 导出日志文件,当使用的是 exp 模式导出的数据,应当用 imp 模式导入;
导出日志文件一般格式如下 ,例如 a.log:


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Tes
Export done in UTF8 character set and UTF8 NCHAR character set
server uses AL32UTF8 character set (possible charset conversion)About to export specified tables via Conventional Path ...
Current user changed to SYSTEM
. . exporting table           USER_EXPORT   19138328 rows exported
EXP-00091: Exporting questionable statistics.
EXP-00091: Exporting questionable statistics.
EXP-00091: Exporting questionable statistics.
EXP-00091: Exporting questionable statistics.
Export terminated successfully with warnings.

从日志文件我们可以分析出,

  • 原始数据导出的 Oracle 版本为 Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
  • 原始数据导出的 Oracle character 为 AL32UTF8
  • 原始数据导出的 Oracle 命令为 EXP
  • 原始数据导出的表(exporting table )为 USER_EXPORT
  • 原始数据导出的用户(Current user)为 SYSTEM

2. 源数据导出环境为 AL32UTF8 ,目标环境为 ZHS16GBK ,导致命令无法执行或数据乱码;

导入数据时,必须保证两个平台的 字符集一致,若不一致,会导致出现导入失败问题,解决方法为
设置 Oracle 环境变量的方式解决,具体可以参考博文 Oracle 字符集简介及修改操作实战

http://www.xdnf.cn/news/9956.html

相关文章:

  • 树型表查询方法 —— SQL递归
  • RockyLinux9安装Docker
  • 进阶智能体实战八、需求分析助手(基于qwen多模态大模型对图文需求文档分析)(帮你生成 模块划分+页面+表设计、状态机、工作流、ER模型)
  • 摄像头模块的镜头类型
  • Git 全平台安装指南:从 Linux 到 Windows 的详细教程
  • PCIe走线注意事项
  • 【动态规划:斐波那契数列模型】第 N 个泰波那契数
  • 英语学习5.29
  • Java开发经验——阿里巴巴编码规范实践解析5
  • 数字人系统源码搭建步骤
  • NHANES指标推荐:UAR
  • LINUX中TOMCAT安装和Nginx源码安装
  • 【深度学习】12. VIT与GPT 模型与语言生成:从 GPT-1 到 GPT4
  • docker-compose部署SpringBoot项目的两种方式(构建镜像和挂载文件)
  • Python打卡第39天
  • Futaba乐迪小飞象Frsky7通多协议接收机KA6说明书
  • hf-mirror断点续传下载权重
  • AAOS系列之(六) ---CarPowerManager中写入的状态,如何在ViewRootImpl中读取问题
  • [git]忽略.gitignore文件
  • 软件项目需求说明书简要模板
  • 【Redis】大key问题详解
  • 【计网】分片
  • websocket在vue中的使用步骤,以及实现聊天
  • MaaS(模型即服务)是什么?
  • IT Tools 部署
  • 食材走T台?Coze+即梦应用实例:实现一键生成食材走秀视频!!(附提示词)
  • [C]基础18.自定义类型:联合和枚举
  • Python实例题:Python实现Zip文件的暴力破解
  • Spring Boot整活指南:从Helo World到“真香”定律
  • 29、请求处理-常用参数注解使用