导入DMP文件至全新Oracle数据库时遇ORA-02236无效文件名错误
解决Oracle impdp导入时ORA-39083和ORA-02236的问题
这个错误我太熟悉了——核心原因就是原备份里的UNDOTBS1表空间数据文件路径,在你的新数据库环境中要么不存在,要么Oracle操作系统用户没有读写权限,导致Oracle判定文件名无效。下面给你一步步的解决办法:
第一步:确认原备份中的数据文件路径
先把备份里的表空间创建DDL导出来,看看原来的路径是什么:
impdp system/welcome1 full=yes directory=BACKUPSDR dumpfile=bck_full_AXISPROD_15012018.dmp sqlfile=ts_ddl.sql
打开生成的ts_ddl.sql,找到CREATE UNDO TABLESPACE "UNDOTBS1"那一行,看DATAFILE后面跟着的路径(比如/u01/oracle/oradata/AXISPROD/undotbs01.dbf)。
第二步:选择适合你的修复方案
方案1:用REMAP_DATAFILE映射路径
直接在导入命令里把原路径替换成新环境中存在的有效路径,比如原路径是/u01/oracle/oradata/AXISPROD/undotbs01.dbf,新环境路径是/u02/oracle/oradata/NEWDB/undotbs01.dbf,执行:
impdp system/welcome1 full=yes directory=BACKUPSDR dumpfile=bck_full_AXISPROD_15012018.dmp logfile=bck_full_AXISPROD_15012018.LOG remap_datafile='/u01/oracle/oradata/AXISPROD/undotbs01.dbf':'/u02/oracle/oradata/NEWDB/undotbs01.dbf'
如果是跨操作系统(比如原Linux新Windows),路径格式要对应调整,比如Windows路径写成D:\oracle\oradata\NEWDB\undotbs01.dbf。
方案2:手动创建表空间后跳过导入
先在新库手动创建UNDOTBS1表空间,用新环境的有效路径,参数和原备份保持一致:
CREATE UNDO TABLESPACE "UNDOTBS1" DATAFILE '/u02/oracle/oradata/NEWDB/undotbs01.dbf' SIZE 209715200 AUTOEXTEND ON NEXT 5242880 MAXSIZE 32767M BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
然后导入时排除这个表空间的创建:
impdp system/welcome1 full=yes directory=BACKUPSDR dumpfile=bck_full_AXISPROD_15012018.dmp logfile=bck_full_AXISPROD_15012018.LOG exclude=tablespace:"='UNDOTBS1'"
额外注意事项
- 确保
BACKUPSDR目录对应的操作系统路径存在,且Oracle用户有读写权限; - 新环境的目标磁盘要有足够空间,数据文件所在目录也要给Oracle用户开读写权限;
- 如果还有其他表空间出现类似错误,重复上述步骤处理即可。
内容的提问来源于stack exchange,提问作者Pedro Nunes
相关产品推荐
相关产品推荐

