菜鸟科技网

impdp命令参数有哪些用法?

impdp 是 Oracle Data Pump 技术的一部分,用于从由 expdp (Data Pump Export) 创建的转储文件集中恢复数据,与传统的 imp (Import) 工具相比,impdp 具有更高的性能、更强的并行能力和更丰富的功能。

impdp命令参数有哪些用法?-图1
(图片来源网络,侵删)

核心概念:impdp vs expdp vs imp

在深入 impdp 之前,先理解它与相关工具的区别至关重要。

特性 expdp / impdp (Data Pump) exp / imp (Traditional)
技术架构 服务端进程,通过 API 与数据库交互,客户端只发送命令。 客户端工具,直接连接数据库进行读写。
性能 ,可利用多个并行服务器进程,直接在数据文件间读写,不经过客户端。 ,数据流必须经过客户端,网络瓶颈明显。
文件格式 专有二进制格式,文件以 .dmp 通常包含元数据(.dpd 文件)。 文本格式,文件为可读的文本,包含 DDL 和数据。
功能 丰富,支持数据过滤、传输表空间、网络导入、重新映射等高级功能。 基础,功能相对有限。
权限要求 需要 DATAPUMP_IMP_FULL_DATABASE 角色(导入整个数据库时)或对象的所有者权限。 需要 EXP_FULL_DATABASE / IMP_FULL_DATABASE 角色。
可恢复性 支持 SKIP_UNUSABLE_INDEXES 等高级错误处理。 错误处理机制简单,容易中断。

核心结论: 在所有现代 Oracle 环境中,强烈推荐使用 expdpimpdp,除非有非常特殊的兼容性要求。


impdp 命令基本语法

impdp 命令在操作系统命令行(如 Linux 的终端或 Windows 的 CMD)中执行,其基本语法如下:

impdp username/password[@connect_identifier] DUMPFILE=dumpfile1.dmp[,dumpfile2.dmp,...] [OPTIONS]
  • username/password[@connect_identifier]: 连接到数据库的凭证,可以是 sys/yourpass as sysdba 这样的系统用户。
  • DUMPFILE=...: 必需参数,指定要导入的转储文件列表,多个文件用逗号分隔。
  • OPTIONS: 各种可选参数,用于控制导入行为。

核心参数详解

下面将 impdp 的参数分为几大类进行详细说明。

impdp命令参数有哪些用法?-图2
(图片来源网络,侵删)

连接与认证参数

参数 描述 示例
USERID 指定用户名、密码和连接字符串,这是最常用的连接方式。 impdp scott/tiger@orcl ...
SQLFILE 只生成 DDL 语句,不导入数据,结果会输出到指定文件,这对于在导入前审查或修改脚本非常有用。 impdp ... SQLFILE=pre_import.sql
CONTENT 指定导入内容。 impdp ... CONTENT=DATA_ONLY (只导入数据)
impdp ... CONTENT=METADATA_ONLY (只导入元数据/DDL)
impdp ... CONTENT=ALL (默认,全部导入)

源文件与目标对象参数

参数 描述 示例
DUMPFILE 指定要导入的转储文件名。 impdp ... DUMPFILE=expdat.dmp
impdp ... DUMPFILE=dir1:exp1.dmp,dir2:exp2.dmp
REMAP_DATAFILE 非常实用,将转储文件中的数据文件路径重定向到新的路径,这在跨平台或移动数据库文件时必不可少。 impdp ... REMAP_DATAFILE='/u01/oradata/old.dbf':'/new/path/new.dbf'
REMAP_SCHEMA 非常实用,将一个模式下的所有对象导入到另一个模式中。 impdp ... REMAP_SCHEMA=SCOTT:ADAM (将 SCOTT 的所有对象导入到 ADAM 用户下)
REMAP_TABLESPACE 将表空间重命名,导入时,原来属于 USERS 表空间的表将被创建到 NEW_TS 表空间。 impdp ... REMAP_TABLESPACE=USERS:NEW_USERS
TABLE_EXISTS_ACTION 当导入的表已存在时的处理策略。 impdp ... TABLE_EXISTS_ACTION=APPEND (追加数据)
impdp ... TABLE_EXISTS_ACTION=TRUNCATE (清空表后导入)
impdp ... TABLE_EXISTS_ACTION=REPLACE (删除并重建表)
impdp ... TABLE_EXISTS_ACTION=SKIP (跳过该表)

过滤与选择参数

参数 描述 示例
SCHEMAS 按模式(用户名)导入,可以指定多个模式,用逗号分隔。 impdp ... SCHEMAS=HR,SCOTT
TABLES 按表名导入,可以指定多个表,用逗号分隔。 impdp ... TABLES=HR.EMPLOYEES,HR.DEPARTMENTS
TABLESPACES 按表空间导入。 impdp ... TABLESPACES=USERS,EXAMPLE
QUERY 强大的数据过滤,使用 WHERE 子句来过滤要导入的行。注意:QUERY 必须用双引号括起来,并且表名需要用双引号或引号括起来。 impdp ... TABLES=EMPLOYEES QUERY=\"WHERE department_id = 10 AND salary > 5000\"

性能与并行参数

参数 描述 示例
PARALLEL 提升导入速度的关键,指定并行度,即 Data Pump 使用的并行工作进程数,通常设置为可用 CPU 数量或 I/O 能力的函数。 impdp ... PARALLEL=4
JOB_NAME 为导入作业指定一个自定义名称,默认名称为 SYS_IMPORT_<mode>_<timestamp> impdp ... JOB_NAME=IMPORT_HR_SCHEMA
FLASHBACK_SCN / FLASHBACK_TIME 将数据导入到指定的 SCN 或时间点,这要求源数据库在导出后没有提交过能改变目标数据的 DML 操作。 impdp ... FLASHBACK_TIME=\"TO_TIMESTAMP('2025-10-27 10:00:00', 'YYYY-MM-DD HH24:MI:SS')\"

高级与元数据参数

参数 描述 示例
FULL 导出整个数据库(需要 DATAPUMP_IMP_FULL_DATABASE 权限)。 impdp ... FULL=YES
TRANSPORT_TABLESPACES 传输表空间,导入与表空间相关的数据文件和元数据,实现快速表空间迁移,需要配合 expdpTRANSPORT_FULL_CHECK=YESDATAFILES 参数使用。 impdp ... TRANSPORT_TABLESPACES=USERS
EXCLUDE / INCLUDE 排除或包含特定对象类型。 impdp ... SCHEMAS=HR EXCLUDE=STATISTICS (导入 HR 模式,但不导入统计信息)
impdp ... INCLUDE=TABLE,GRANT (只导入表和授权)
LOGFILE 指定日志文件名,默认为 impdp_<job_name>.log impdp ... LOGFILE=import.log
NOLOGFILE 不生成日志文件,不推荐,除非是临时测试。 impdp ... NOLOGFILE

使用场景与示例

场景1:导入单个用户的所有对象

# 将用户 SCOTT 的所有数据导入到数据库中
impdp scott/tiger@orcl DUMPFILE=scott_exp.dmp DIRECTORY=DATA_PUMP_DIR SCHEMAS=SCOTT

场景2:导入特定表并追加数据

# 将 HR 用户的 EMPLOYEES 和 DEPARTMENTS 表追加到现有表中
impdp hr/hrpwd@orcl DUMPFILE=hr_tables.dmp DIRECTORY=DATA_PUMP_DIR \
TABLES=HR.EMPLOYEES,HR.DEPARTMENTS TABLE_EXISTS_ACTION=APPEND

场景3:跨模式导入

# 将 SCOTT 模式下的所有对象导入到 ADAM 模式
impdp system/manager@orcl DUMPFILE=scott_exp.dmp DIRECTORY=DATA_PUMP_DIR \
REMAP_SCHEMA=SCOTT:ADAM

场景4:只生成 DDL 脚本,不导入数据

# 为 ADAM 模式下的所有对象生成 DDL 脚本,以便审查或修改
impdp system/manager@orcl DUMPFILE=scott_exp.dmp DIRECTORY=DATA_PUMP_DIR \
SCHEMAS=SCOTT REMAP_SCHEMA=SCOTT:ADAM SQLFILE=adam_ddl.sql

场景5:使用数据过滤

# 只导入部门 ID 为 10 且薪资大于 5000 的员工数据
impdp hr/hrpwd@orcl DUMPFILE=hr_exp.dmp DIRECTORY=DATA_PUMP_DIR \
TABLES=HR.EMPLOYEES QUERY=\"WHERE department_id = 10 AND salary > 5000\"

场景6:并行导入提升速度

# 使用 4 个并行进程导入整个 SCHEMA
impdp system/manager@orcl DUMPFILE=big_schema.dmp DIRECTORY=DATA_PUMP_DIR \
SCHEMAS=BIG_SCHEMA PARALLEL=4

执行步骤与最佳实践

  1. 准备工作

    • 创建目录对象impdp 需要一个数据库的 DIRECTORY 对象来定位转储文件,该目录必须在数据库服务器上存在,并且导入用户需要有该目录的 READ 权限。
      -- 以 SYS 或 SYSTEM 用户执行
      CREATE DIRECTORY DATA_PUMP_DIR AS '/path/to/dump/files';
      GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO scott;
    • 检查空间:确保目标数据库有足够的表空间空间。
    • 检查权限:确保用户有足够的权限(IMP_FULL_DATABASE 或对象本身权限)。
  2. 执行导入

    • 在操作系统命令行中,按照上述语法执行 impdp 命令。
  3. 监控与排错

    • 查看日志:导入过程中和完成后,务必检查 LOGFILE,日志会详细记录导入的每个步骤、性能统计和任何错误信息。
    • 使用 STATUS:在另一个终端,可以使用 impdpATTACH 功能查看作业状态。
      impdp system/manager@orcl ATTACH=IMPORT_HR_SCHEMA
    • 常见错误
      • ORA-39002: invalid operation:通常是参数名拼写错误或值不合法。
      • ORA-39070: Unable to open the log file.:目录对象权限不足或路径错误。
      • ORA-00942: table or view does not existSCHEMASTABLES 参数指定的对象不存在。
      • ORA-00001: unique constraint violatedTABLE_EXISTS_ACTION 设置不当,或者数据与现有主键/唯一键冲突。

impdp 是一个功能强大且灵活的工具,掌握它的关键在于:

impdp命令参数有哪些用法?-图3
(图片来源网络,侵删)
  • 理解核心参数:特别是 REMAP_*TABLE_EXISTS_ACTIONQUERYPARALLEL
  • 明确导入目标:你是要导入整个用户、特定表,还是仅仅为了生成脚本?
  • 善用日志:日志是排查问题的第一手资料。
  • 注意权限:确保用户有操作 DIRECTORY 和目标对象的权限。

通过合理组合这些参数,你可以应对绝大多数数据导入场景,并高效、安全地完成数据迁移任务。

分享:
扫描分享到社交APP
上一篇
下一篇