Oracle 11g R2中源schema不存在时impdp能否正常导入dump文件?
Oracle 11g R2 impdp 导入无日志dump文件问题解答
结论
按照你当前写的参数执行,无法正常导入dump内的所有对象。
核心原因
remap_schema=源schema:目标schema的生效逻辑是:impdp读取dump文件中记录的原始导出schema名称,只有你填写的「源schema」值和dump内记录的原始schema名完全匹配时,才会把对应对象映射到目标schema下。你当前随意填写的源schemarx如果和dump实际导出的schema名不一致,该映射规则完全不会触发。- 当remap规则不触发时,impdp会默认尝试把对象导入到和dump原始导出schema同名的数据库用户下,此时如果目标库不存在对应用户,会直接抛出
ORA-39083: 对象创建失败, 出现错误: ORA-01918: 用户'xxx'不存在的报错,导入流程中断。 - 你当前写的参数文件本身还有两处会直接导致执行失败的错误:
directory参数填写的my directory带空格,Oracle数据库内创建的directory对象名不允许包含空格,需要和dba_directories视图中记录的实际目录对象名完全一致- 表存在处理参数拼写错误,正确参数名是
table_exists_action,你写的table_exist_action少了字母s,执行时会直接报参数无效错误
正确操作步骤
- 先查询dump文件内的真实原始schema名,不需要实际导入数据,执行以下命令即可:
执行完成后会在对应directory指向的操作系统路径下生成impdp 你的导入用户/密码@数据库实例 directory=你实际创建的目录对象名 dumpfile=你的dump文件名.dmp sqlfile=dump_meta.sql full=ydump_meta.sql文件,打开文件搜索CREATE USER、SCHEMA关键字,就能拿到dump导出时对应的原始schema名称。 - 提前在目标库创建好目标用户
tbs,给用户分配对应表空间的无限配额,以及CREATE TABLE、CREATE SEQUENCE、CREATE PROCEDURE等导入需要的基础权限。 - 修正参数文件内容,参考如下:
directory=你实际的目录对象名 remap_schema=上一步查到的真实原始schema名:tbs table_exists_action=replace # 如果原始schema用了自定义表空间,建议追加remap_tablespace映射,避免表空间不存在报错 # remap_tablespace=原始表空间名:目标表空间名 - 再执行impdp命令传入修正后的parfile即可正常导入。
补充说明:
remap_schema指定的源schema不需要在目标数据库中提前存在,只要参数里填的源schema名和dump内记录的原始名一致,映射规则就能正常生效。
内容的提问来源于stack exchange,提问作者jack zh
相关产品推荐
相关产品推荐

