Oracle Data Pump实战:expdp/impdp常用参数与导入导出命令整理_20260406
2026/4/6 12:48:40 网站建设 项目流程
官方文档Oracle 数据泵https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump.html#GUID-501A9908-BCC5-434C-8853-9A6096766B5A数据泵 Oracle 的导出导入工具。expdp 负责导出impdp 负责导入。常用于迁移数据库、复制环境、恢复表或 schema。在 Oracle 运维里数据库迁移、环境复制、对象恢复、测试库初始化这几类工作基本都绕不开数据泵。Oracle 从 10g 开始提供Data Pump也就是我们常说的expdpExport Data Pump用于导出对象和数据impdpImport Data Pump用于导入对象和数据可以把它理解成一组配套命令expdp负责把数据库内容“打包带走”impdp负责把这些内容“解包落地”相比老版本exp/imp数据泵由数据库服务器端执行使用服务端进程创建 Job 来完成导出导入性能更高、功能更完整也更适合生产环境使用。一、先把 DIRECTORY 讲明白这个点特别关键也是最容易踩坑的地方。在命令里经常会看到DIRECTORYDMPDIR这里的DMPDIR不是 Linux 上的目录路径本身而是Oracle 数据库里的 DIRECTORY 对象名。它背后会映射到服务器上的一个真实目录比如/data/expdp。也就是说正式执行前一般要先做两步。1服务器上创建真实目录df -h mkdir -p /data/expdp chown -R oracle:oinstall /data/expdp chmod 755 /data/expdp # 创建数据泵文件存放目录并赋予 oracle 用户访问权限2数据库中创建 DIRECTORY 对象并授权su - oracle export ORACLE_SID本机实例名 sqlplus / as sysdba CREATE OR REPLACE DIRECTORY DMPDIR AS /data/expdp; -- 创建目录对象 DMPDIR对应服务器目录 /data/expdp GRANT READ, WRITE ON DIRECTORY DMPDIR TO system; GRANT READ, WRITE ON DIRECTORY DMPDIR TO scott; -- 授权相关用户使用该目录对象3检查是否创建成功SELECT directory_name, directory_path FROM dba_directories WHERE directory_name DMPDIR; -- 查看 DIRECTORY 对象对应的实际路径一句话记住DIRECTORY后面写的是 Oracle 目录对象名不是操作系统路径。二、生产环境常用参数速查参数不用全记生产里真正高频的就那么几类DIRECTORY、DUMPFILE、LOGFILE、SCHEMAS、TABLES、FULL、CONTENT、PARALLEL、PARFILE以及导入时的REMAP_*和TABLE_EXISTS_ACTION。其余像ATTACH、NETWORK_LINK、VIEWS_AS_TABLES不是天天用但碰到特定场景会很好使。原文里这些参数和常用命令都列得比较全我这里做了适合博客阅读的压缩整理。1expdp 常用参数expdp 语法 expdp 用户名/密码 参数名参数值 expdp KEYWORDvalue or KEYWORD(value1,value2,...,valueN) 最简单示例 expdp scott/tiger DIRECTORYDMPDIR DUMPFILEscott.dmp DIRECTORYDMPDIR 指定 Oracle DIRECTORY 目录对象。dump 文件和日志文件都会写到这个对象对应的服务器路径下。 DUMPFILEscott_%U.dmp 指定导出文件名。大数据量场景常配合 %U 使用表示生成多个 dump 文件 方便并行导出也避免单文件过大。 LOGFILEscott_exp.log 指定导出日志文件名。生产环境建议必带导出是否成功、哪些对象被跳过、报错原因都先看它。 SCHEMASscott 按 schema 导出。生产环境最常见的场景之一适合迁移某个业务用户的全部对象和数据。 TABLESscott.emp 按表导出。适合单表恢复、局部迁移、测试抽数。 FULLYES 全库导出。适合整库迁移、环境复制、灾备场景。 执行全库导出通常需要 DATAPUMP_EXP_FULL_DATABASE 角色。 CONTENTALL | DATA_ONLY | METADATA_ONLY 控制导出内容 ALL 结构和数据都导 DATA_ONLY 只导数据 METADATA_ONLY 只导对象定义不导数据 EXCLUDEINDEX 排除某类对象。生产里很常见的是排除索引先把表和数据导出来后面再统一处理索引。 INCLUDEPROCEDURE 只导出某类对象。适合只迁存储过程、视图、函数等对象。 PARALLEL4 指定并行度。默认值为 1。适合大数据量导出但一般不要大于 dump 文件数量 也要结合 CPU、IO 和存储性能评估。 FILESIZE10G 限制每个 dump 文件的最大大小。适合大库导出时拆分文件方便传输和归档。 COMPRESSIONALL | DATA_ONLY | METADATA_ONLY | NONE 控制压缩方式。常用于减小 dump 文件体积但会增加一定 CPU 开销。 PARFILEexpdp.par 指定参数文件。命令参数较多时非常推荐能让命令更清晰也方便复用和留档。 QUERYwhere deptno10 按条件导出数据。适合抽取部分测试数据或者按条件导出指定记录。 CLUSTERNO RAC 环境常用。若导出目录不是共享存储通常建议显式设置为 NO 否则任务可能跑到其他节点报 ORA-31693 等错误。 ATTACHSYS_EXPORT_SCHEMA_01 连接到已经运行中的数据泵作业进入交互模式。 适合查看、控制、停止、继续一个正在执行的导出任务。 NETWORK_LINKsource_database_link 通过数据库链路直接从源库导出。适合跨库迁移但对链路、权限、网络稳定性有要求。 VIEWS_AS_TABLESview_name 将视图按表的方式导出。不是最高频参数但某些报表或接口视图抽取场景会用到。2impdp 常用参数impdp 语法 expdp 用户名/密码 参数名参数值 impdp KEYWORDvalue or KEYWORD(value1,value2,...,valueN) 最简单示例 impdp scott/tiger DIRECTORYDMPDIR DUMPFILEscott.dmp DIRECTORYDMPDIR 指定 Oracle DIRECTORY 目录对象。impdp 会从该对象对应的服务器目录中读取 dump 文件 同时把导入日志写到该目录下。 DUMPFILEscott_%U.dmp 指定导入使用的 dump 文件名。若导出时用了 %U 多文件方式这里通常也按同样方式写。 LOGFILEscott_imp.log 指定导入日志文件名。导入报错、对象是否创建成功、哪些对象被跳过基本都在日志里看。 SCHEMASscott 按 schema 导入。生产环境最常见的用法之一适合导入一个业务用户的全部对象和数据。 TABLESscott.emp 按表导入。适合单表恢复、问题表回灌、局部迁移。 FULLYES 全库导入。适合整库迁移或整环境恢复。 执行全库导入通常需要 DATAPUMP_IMP_FULL_DATABASE 角色。 CONTENTALL | DATA_ONLY | METADATA_ONLY 控制导入内容 ALL 结构和数据都导 DATA_ONLY 只导数据 METADATA_ONLY 只导对象定义 EXCLUDEINDEX 导入时排除某类对象。常见做法是先导表和数据索引后建减少导入阶段压力。 INCLUDEPROCEDURE 导入时只处理指定对象类型。适合只恢复存储过程、视图、函数等。 PARALLEL4 指定并行度。默认值为 1。适合大数据量导入但一般不应大于 dump 文件数量 也要结合目标库资源情况评估。 PARFILEimpdp.par 指定参数文件。导入参数一多时很推荐尤其是带 remap、exclude、table_exists_action 时更清晰。 REMAP_SCHEMAscott:scott_test 导入时将源 schema 映射为新的目标 schema。 这个在生产导测试、生产导预发时非常常见。 REMAP_TABLEemp:emp_bak 导入时重命名表。适合临时恢复到新表名避免和现有表冲突。 REMAP_TABLESPACEusers:app_tbs 导入时将原表空间映射到新的表空间。适合源库和目标库表空间名称不一致的情况。 TABLE_EXISTS_ACTIONSKIP | APPEND | TRUNCATE | REPLACE 目标表已存在时的处理方式 SKIP 表存在就跳过 APPEND 追加数据 TRUNCATE 先清空表再导入 REPLACE 删除重建再导入 QUERYwhere deptno10 按条件导入。使用频率没有导出侧那么高但特定场景也会用到。 CLUSTERNO RAC 环境常用。若 DIRECTORY 对应目录不是共享存储通常建议显式设置为 NO 避免任务被调度到无权限节点导致报错。 ATTACHSYS_IMPORT_SCHEMA_01 连接到已运行的导入作业进入交互模式。 适合查看状态、控制、停止或继续任务。 NETWORK_LINKsource_database_link 通过数据库链路从源库直接导入不依赖中间 dump 文件。 适合跨库迁移但对链路和权限要求较高。 VIEWS_AS_TABLESview_name 将视图按表方式导入。不是高频但在某些视图抽取迁移场景会用到。 SQLFILEimport.sql 将 dmp 文件中的 DDL 输出到文件不真正导入数据库。 适合先审查建表语句、索引语句等。 TRANSFORMSEGMENT_ATTRIBUTES:N 导入时忽略对象段属性让对象按目标库默认表空间属性创建。 在表空间调整场景里比较实用。三、生产环境最常用的导出 / 导入命令对照这一节不搞参数大阅兵只保留生产里最常见、最能打的几组命令。原文里单表、多表、schema、全库、并行、元数据、排除索引、重命名等命令都给了示例我这里把最常用的主力场景整理成对。1按 schema 导出 / 导入这是最常见的场景。一个业务系统对应一个 schema要迁移、复制、恢复通常就是这么干。expdp system/oracle DIRECTORYDMPDIR DUMPFILEscott_%U.dmp LOGFILEscott_exp.log SCHEMASscott PARALLEL4 # 导出整个 scott schema使用并行和多文件输出impdp system/oracle DIRECTORYDMPDIR DUMPFILEscott_%U.dmp LOGFILEscott_imp.log SCHEMASscott PARALLEL4 # 将 scott schema 导入目标库2全库导出 / 导入需要注意的点确保目标端字符集与源端保持一致否则可能导致乱码。确保存放数据文件的磁盘空间足够。确保源端数据文件路径在目标端存在或者目标端配置OMF参数手工创建表空间也可以。目标端存在数据的话需要加上table_exists_action参数。如果导入过程中出现ORA-31684错误代表目标库已存在可以忽略这个错误。整库迁移、完整环境复制时常用。操作范围大执行前一定要确认磁盘空间、权限和目标环境。expdp system/oracle DIRECTORYDMPDIR DUMPFILEfull_%U.dmp LOGFILEfull_exp.log FULLYES PARALLEL4 # 全库导出impdp system/oracle DIRECTORYDMPDIR DUMPFILEfull_%U.dmp LOGFILEfull_imp.log FULLYES PARALLEL4 # 全库导入3单表导出 / 导入适合单表恢复、问题表迁移、临时抽取测试数据。小而精排障时特别常见。expdp system/oracle DIRECTORYDMPDIR DUMPFILEemp.dmp LOGFILEemp_exp.log TABLESscott.emp # 导出 scott.emp 表impdp system/oracle DIRECTORYDMPDIR DUMPFILEemp.dmp LOGFILEemp_imp.log TABLESscott.emp # 导入 scott.emp 表4导入到新 schema比如把生产的scott导到测试库里的scott_test避免直接覆盖原用户。impdp system/oracle DIRECTORYDMPDIR DUMPFILEscott_%U.dmp LOGFILEremap_schema.log SCHEMASscott REMAP_SCHEMAscott:scott_test # 将 scott 的对象导入到 scott_test 用户下5导入到新表空间当源库和目标库表空间名称不一致时这个参数非常实用。impdp system/oracle DIRECTORYDMPDIR DUMPFILEscott_%U.dmp LOGFILEremap_tbs.log SCHEMASscott REMAP_TABLESPACEusers:app_tbs # 将原来 users 表空间中的对象导入到 app_tbs 表空间6排除索引导出 / 导入这个在生产里很实用。特别是大表很多、索引很多时先排除索引把数据尽快落库后面再单独建索引往往更稳。expdp system/oracle DIRECTORYDMPDIR DUMPFILEnoindex_%U.dmp LOGFILEnoindex_exp.log SCHEMASscott EXCLUDEINDEX PARALLEL4 # 导出 schema但排除索引impdp system/oracle DIRECTORYDMPDIR DUMPFILEnoindex_%U.dmp LOGFILEnoindex_imp.log SCHEMASscott PARALLEL4 # 先把表和数据导入目标库索引后续再处理导入后记得收尾当导入完成后目标端执行无效对象重编译后与源端进行比较sqlplus / as sysdba ?/rdbms/admin/utlrp.sql四、示例生产实战操作记录Data Pump(expdp/impdp)数据迁移实战笔记https://blog.csdn.net/weixin_45806267/article/details/153959495?spm1001.2014.3001.5501下面这组流程基本就是日常最常见的 schema 迁移套路。1服务器端准备目录mkdir -p /data/expdp chown -R oracle:oinstall /data/expdp chmod 755 /data/expdp # 准备 dump 文件和日志文件存放目录2数据库中创建目录对象并授权CREATE OR REPLACE DIRECTORY DMPDIR AS /data/expdp; GRANT READ, WRITE ON DIRECTORY DMPDIR TO system; GRANT READ, WRITE ON DIRECTORY DMPDIR TO scott; -- 创建 DIRECTORY 对象并授权3导出 schemaexpdp system/oracle DIRECTORYDMPDIR DUMPFILEscott_%U.dmp LOGFILEscott_exp.log SCHEMASscott PARALLEL4 # 导出 scott schema4导入 schemaimpdp system/oracle DIRECTORYDMPDIR DUMPFILEscott_%U.dmp LOGFILEscott_imp.log SCHEMASscott PARALLEL4 # 导入 scott schema五、建议1日志尽量都带上LOGFILE不是摆设是排错入口。数据泵真出问题的时候日志比嘴硬靠谱。2参数多时优先用 parfile命令太长容易写错用参数文件更稳也更方便复用和留档。3并行别开太猛PARALLEL能提速但不是玄学加成。开太大数据库和存储也会一起冒汗。4RAC 环境重点关注 CLUSTER如果目录不是共享存储通常要重点考虑CLUSTERNO不然任务可能跑到不该跑的节点上。5导入前先检查目标环境导入前最少要准备好目录、DIRECTORY、表空间、用户、配额、权限。至少确认这几件事目标用户是否存在目标表空间是否存在DIRECTORY 是否存在执行用户是否有 DIRECTORY 权限是否需要REMAP_SCHEMA或REMAP_TABLESPACE目标表已存在时TABLE_EXISTS_ACTION应该怎么选很多导入失败不是命令写错而是环境没对齐。注意先创建好表空间并没有错“提前建好”是为了让目标库有承接条件。导入过程会报TABLESPACE already exists是因为导入文件里本身也带了“创建表空间”的元数据impdp会按 dmp 内容再尝试创建一次发现目标库已有就报已存在并跳过。6导入后记得收尾当导入完成后目标端执行无效对象重编译后与源端进行比较sqlplus / as sysdba ?/rdbms/admin/utlrp.sql

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询