使用impdp导入Oracle 12c时报错,是否需先创建日志文件?
解决Oracle Data Pump导入(impdp)的错误问题
咱们一步步拆解你的错误,核心原因其实很明确:
首先,你遇到的ORA-39145: directory object parameter must be specified and non-null是根源问题,另外两个错误(ORA-39002、ORA-39070)都是由它引发的:
- ORA-39070 是因为Data Pump不知道该把日志文件写到哪个位置,所以无法创建/打开日志文件;
- ORA-39002 是参数缺失导致整个导入操作直接失效。
关于日志文件的关键说明
你完全不需要提前手动创建日志文件!impdp会自动在指定的目录下生成日志文件——但前提是你必须告诉它Oracle数据库的目录对象(注意:这不是操作系统的物理路径,是数据库层面定义的对象)。
具体解决步骤
确认可用的数据库目录对象
先查询数据库中已有的目录对象(如果自己没有DBA权限,可以找你的数据库管理员帮忙查询):SELECT directory_name, directory_path FROM dba_directories;通常Oracle默认会自带
DATA_PUMP_DIR这个目录对象,对应的是Oracle系统预设的dump文件存储路径。修改impdp命令,添加DIRECTORY参数
在你的导入命令中加上DIRECTORY参数,指定要使用的目录对象。比如用默认的DATA_PUMP_DIR的话,命令应该改成这样:impdp SOLVIA/SOLVIA900@IMMBO DIRECTORY=DATA_PUMP_DIR DUMPFILE=week_exp_immbo.dmp LOGFILE=week_exp_immbo.log REUSE_DATAFILES=YES exclude=tablespace:"IN ('IMMBO')"额外注意:
- 要确保
week_exp_immbo.dmp文件已经放在DATA_PUMP_DIR对应的操作系统物理路径下; - 如果没有合适的目录对象,可以让DBA创建一个并给你的用户授权读写权限:
之后在命令中替换成CREATE DIRECTORY my_dump_dir AS '/your/actual/os/path'; GRANT READ, WRITE ON DIRECTORY my_dump_dir TO SOLVIA;DIRECTORY=my_dump_dir即可。
- 要确保
版本差异的额外提醒
你是从Oracle 12c企业版导入到标准版,后续可能会遇到一些企业版特有的特性在标准版中不支持的错误,但当前的问题先通过添加DIRECTORY参数就能解决。
内容的提问来源于stack exchange,提问作者en Lopes




