目录
一、无论使用 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 文件导入的绝大多数问题。