You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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数据库的目录对象(注意:这不是操作系统的物理路径,是数据库层面定义的对象)。

具体解决步骤

  1. 确认可用的数据库目录对象
    先查询数据库中已有的目录对象(如果自己没有DBA权限,可以找你的数据库管理员帮忙查询):

    SELECT directory_name, directory_path FROM dba_directories;
    

    通常Oracle默认会自带DATA_PUMP_DIR这个目录对象,对应的是Oracle系统预设的dump文件存储路径。

  2. 修改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即可。
  3. 版本差异的额外提醒
    你是从Oracle 12c企业版导入到标准版,后续可能会遇到一些企业版特有的特性在标准版中不支持的错误,但当前的问题先通过添加DIRECTORY参数就能解决。

内容的提问来源于stack exchange,提问作者en Lopes

火山引擎 最新活动