Oracle 12c impdp导入报错:EXCLUDE参数格式非法
解决IMPDP导入时的ORA-39071和ORA-00936错误
你遇到的问题核心是EXCLUDE参数的格式不符合Oracle Data Pump的要求——命令行解析器吃掉了部分引号,导致数据库收到的表达式不完整,进而触发了错误。咱们一步步来修正:
错误原因
你的原命令中exclude=tablespace:"IN ('IMMBO')"的引号处理存在问题:在命令行环境下,双引号会被shell(Linux/Unix)或命令提示符(Windows)解析,导致Oracle实际接收到的条件缺少必要的引号包裹,最终引发ORA-39071(参数格式错误)和ORA-00936(缺少表达式)。
正确的命令写法
根据你使用的操作系统,选择对应的命令:
1. Linux/Unix系统
有两种可靠的引号处理方式:
- 转义内部的单引号(用两个单引号代表一个实际的单引号):
impdp SOLVIA/SOLVIA900@IMMBO DIRECTORY=DB_EXP DUMPFILE=week_exp_immbo.dmp LOGFILE=week_exp_immbo.log REUSE_DATAFILES=YES exclude=tablespace='IN(''IMMBO'')'
- 用双引号包裹整个
EXCLUDE参数,避免shell解析内部引号:
impdp SOLVIA/SOLVIA900@IMMBO DIRECTORY=DB_EXP DUMPFILE=week_exp_immbo.dmp LOGFILE=week_exp_immbo.log REUSE_DATAFILES=YES "exclude=tablespace:IN ('IMMBO')"
2. Windows系统
Windows命令提示符对引号的处理略有不同,推荐用以下方式:
impdp SOLVIA/SOLVIA900@IMMBO DIRECTORY=DB_EXP DUMPFILE=week_exp_immbo.dmp LOGFILE=week_exp_immbo.log REUSE_DATAFILES=YES "exclude=tablespace:IN ('IMMBO')"
或者同样转义内部单引号:
impdp SOLVIA/SOLVIA900@IMMBO DIRECTORY=DB_EXP DUMPFILE=week_exp_immbo.dmp LOGFILE=week_exp_immbo.log REUSE_DATAFILES=YES exclude=tablespace='IN(''IMMBO'')'
额外建议
如果还是遇到引号相关的麻烦,可以考虑使用参数文件来简化处理:
- 创建一个名为
imp_parms.par的文件,内容如下:
USERID=SOLVIA/SOLVIA900@IMMBO DIRECTORY=DB_EXP DUMPFILE=week_exp_immbo.dmp LOGFILE=week_exp_immbo.log REUSE_DATAFILES=YES EXCLUDE=tablespace:IN ('IMMBO')
- 执行导入命令:
# Linux/Unix impdp parfile=imp_parms.par
# Windows impdp parfile=imp_parms.par
参数文件里的引号不需要额外转义,能避开命令行解析的问题。
另外别忘了确认DB_EXP目录对象已在数据库中创建,且SOLVIA用户拥有该目录的读写权限(可通过GRANT READ, WRITE ON DIRECTORY DB_EXP TO SOLVIA;授权)。
内容的提问来源于stack exchange,提问作者en Lopes
相关产品推荐
相关产品推荐

