Oracle导入dmp文件的步骤、注意细节与常见问题总结大全
作者:杨杨杨。。。
在工作中经常会遇到需要备份库,库表迁移的场景,对于oracle会使用dmp文件进行数据迁移和备份,这篇文章主要介绍了Oracle导入dmp文件的步骤、注意细节与常见问题总结,文中通过代码介绍的非常详细,需要的朋友可以参考下
一、准备工作
无论使用 imp(旧版工具)还是 impdp(数据泵,推荐),需先完成以下基础配置:
确认 dmp 文件来源与版本
- 确保 dmp 文件由
exp(对应imp)或expdp(对应impdp)生成(工具需匹配,否则报错 “文件格式错误”); - 查看 dmp 文件头部版本(如
EXPORT:V11.02.00),确保与目标数据库版本兼容(同主版本或低版本→高版本)。
- 确保 dmp 文件由
创建表空间(若需匹配原表空间)
- 若 dmp 文件包含 “指定表空间” 的对象,需提前创建同名表空间(否则报错
ORA-00959: 表空间不存在):CREATE TABLESPACE 表空间名 DATAFILE '物理路径/表空间文件.dbf' SIZE 500M AUTOEXTEND ON NEXT 50M;
- 若表空间已存在,可跳过此步。
- 若 dmp 文件包含 “指定表空间” 的对象,需提前创建同名表空间(否则报错
创建数据库用户并授权
- 新建用户并指定默认表空间:
CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE 表空间名 TEMPORARY TABLESPACE TEMP;
- 授予必要权限(如
DBA、IMP_FULL_DATABASE):GRANT DBA, IMP_FULL_DATABASE TO 用户名;
- 新建用户并指定默认表空间:
配置目录对象(仅
impdp需要)- 创建目录对象并授权(指向 dmp 文件所在物理路径):
CREATE DIRECTORY 目录名 AS 'D:\dmp文件存储路径'; GRANT READ, WRITE ON DIRECTORY 目录名 TO 用户名;
- 创建目录对象并授权(指向 dmp 文件所在物理路径):
二、使用impdp导入
impdp 是 Oracle 10g+ 推荐的 “数据泵导入” 工具,语法更灵活。
1. 全库导入(full=y)
impdp 用户名/密码@服务名 directory=目录名 dumpfile=dmp文件名.dmp full=y logfile=导入日志.log
2. 单表导入(tables=表名)
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 文件导入的绝大多数问题。
到此这篇关于Oracle导入dmp文件的步骤、注意细节与常见问题总结大全的文章就介绍到这了,更多相关Oracle导入dmp文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
