HOME> 装扮工坊> Oracle 导入 dmp 文件的步骤、注意细节与常见问题总结
{$vo.文章标题}
{$vo.文章标题}

Oracle 导入 dmp 文件的步骤、注意细节与常见问题总结

admin
4037

目录

一、无论使用 imp(旧版工具)还是 impdp(数据泵,推荐),需先完成以下基础配置:

二、使用 impdp 导入(推荐,效率更高)

1. 全库导入(full=y)

2. 单表导入(tables=表名)

三、使用 imp 导入(旧版工具,仅兼容 exp 导出文件)

四、关键注意细节

五、常见问题与解决方案

六、高效导入建议

一、准备工作

无论使用 imp(旧版工具)还是 impdp(数据泵,推荐),需先完成以下基础配置:

确认 dmp 文件来源与版本

确保 dmp 文件由 exp(对应 imp)或 expdp(对应 impdp)生成(工具需匹配,否则报错 “文件格式错误”);查看 dmp 文件头部版本(如 EXPORT:V11.02.00),确保与目标数据库版本兼容(同主版本或低版本→高版本)。 创建表空间(若需匹配原表空间)

若 dmp 文件包含 “指定表空间” 的对象,需提前创建同名表空间(否则报错 ORA-00959: 表空间不存在): sql

CREATE TABLESPACE 表空间名

DATAFILE '物理路径/表空间文件.dbf'

SIZE 500M AUTOEXTEND ON NEXT 50M;

若表空间已存在,可跳过此步。 创建数据库用户并授权

新建用户并指定默认表空间: sql

CREATE USER 用户名 IDENTIFIED BY 密码

DEFAULT TABLESPACE 表空间名

TEMPORARY TABLESPACE TEMP;

授予必要权限(如 DBA、IMP_FULL_DATABASE): sql

GRANT DBA, IMP_FULL_DATABASE TO 用户名;

配置目录对象(仅 impdp 需要)

创建目录对象并授权(指向 dmp 文件所在物理路径): sql

CREATE DIRECTORY 目录名 AS 'D:\dmp文件存储路径';

GRANT READ, WRITE ON DIRECTORY 目录名 TO 用户名;

二、使用 impdp 导入

impdp 是 Oracle 10g+ 推荐的 “数据泵导入” 工具,语法更灵活。

1. 全库导入(full=y)

bash

impdp 用户名/密码@服务名

directory=目录名

dumpfile=dmp文件名.dmp

full=y

logfile=导入日志.log

2. 单表导入(tables=表名)

bash

impdp 用户名/密码@服务名

directory=目录名

dumpfile=dmp文件名.dmp

tables=表名1,表名2

table_exists_action=append # 表已存在时追加数据

logfile=导入日志.log

三、使用 imp 导入

bash (旧版工具,仅兼容 exp 导出文件)

imp 用户名/密码@服务名

file=D:\dmp文件名.dmp

tables=表名1,表名2 # 可选,不写则导入所有对象

ignore=y # 表已存在时忽略错误

log=导入日志.log

四、关键注意细节

权限与目录访问

impdp 需确保目录对象(directory)的物理路径与 dmp 文件位置一致,且 Oracle 服务用户(如 OracleServiceXXX)对该路径有读写权限;我这里就出错了,我远程他们的电脑上,把文件拷在了d盘,但是导入总显示文件不存在。原来是因为数据库建在服务器上,dmp文件在远程电脑上,所以访问不到。要把文件拷到服务器文件夹里就可以解决。imp 需直接指定 dmp 文件的绝对物理路径(如 D:\xxx.dmp),且路径中无中文 / 特殊字符。 版本与工具兼容性

exp 导出的文件只能用 imp 导入,expdp 导出的文件只能用 impdp 导入(工具不匹配会直接报错 “文件格式错误”);若 dmp 文件是高版本导出(如 19c),低版本数据库(如 11g)无法导入(需升级数据库或重新导出)。 参数精准性

impdp 的 table_exists_action 可选 append(追加)、replace(替换)、skip(跳过),需根据需求选择;imp 的 ignore=y 仅忽略 “表已存在” 错误,若需追加数据,建议用 impdp。

五、常见问题与解决方案

报错 ORA-39000: 转储文件说明错误 / ORA-39143: 转储文件可能是原始导出文件

原因:工具不匹配(如用 impdp 导入 exp 导出的文件),或 dmp 文件损坏。解决:确认导出 / 导入工具一致,或重新导出文件。 报错 ORA-00959: 表空间 ‘XXX’ 不存在

原因:dmp 文件中对象的表空间在目标库不存在。解决:提前创建同名表空间,或在导入时指定 remap_tablespace=原表空间:新表空间(仅 impdp 支持)。 报错 IMP-00003: 遇到 ORACLE 错误 6550

原因:导入时默认统计信息冲突。解决:在导入工具中设置 “统计 = 无”(如 PL/SQL Developer 导入时选择 “统计:无”)。 文件只读或无法打开

原因:文件系统权限不足,或编辑器默认只读模式。解决:检查文件属性(取消 “只读” 勾选),或联系管理员开放写入权限。

六、高效导入建议

优先使用 impdp(速度比 imp 快数倍,支持并行导入);大文件导入时,增大缓存区(如 PL/SQL Developer 导入时设置 “缓存区” 为 1024M+);导入前清理目标库中已存在的同名表(避免冲突),或用 table_exists_action=replace 直接替换。

通过以上步骤和注意事项,可高效解决 Oracle dmp 文件导入的绝大多数问题。