You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 19c执行PDB数据泵导出报ORA-39087目录名无效问题求助

Oracle 19c PDB数据泵导出目录无效报错解决方案

报错根因

你执行create directory操作时默认连接的是根容器CDB$ROOT,Oracle中的目录对象属于容器级别专属对象,在CDB根容器创建的目录默认不会同步到下属PDB中。你执行expdp时直接连接PDB1,自然无法识别CDB层面创建的DATAPUMP目录。

排查步骤

  • 先确认创建目录时所在的容器:登录sqlplus执行show con_name,如果返回值为CDB$ROOT,即可验证根因。
  • 切换到PDB1查询目录是否存在:
alter session set container=PDB1;
select directory_name, directory_path from dba_directories where directory_name='DATAPUMP';

如果查询无返回结果,即可确认PDB1中不存在该目录对象。

  • 验证操作系统目录权限:确认/u02/dp_exp_dir的属主为oracle:oinstall、权限为775,这一步你已提前配置,可排除该类问题。

解决方法

以下两种方案任选其一即可:

方案1:在PDB1内部创建目录(推荐,PDB资源隔离性更好)

sqlplus / as sysdba
-- 切换到PDB1容器
alter session set container=PDB1;
-- 若PDB未启动则先启动
alter pluggable database PDB1 open;
-- 在PDB内部创建目录
create directory datapump as '/u02/dp_exp_dir';
-- 给system用户授予目录读写权限
GRANT READ, WRITE ON DIRECTORY datapump TO system;

配置完成后重新执行原有expdp导出命令即可。

方案2:创建CDB级别公共目录

sqlplus / as sysdba
-- 确认当前在CDB$ROOT容器,创建公共目录需加##前缀
create directory ##datapump as '/u02/dp_exp_dir';
-- 给所有容器的system用户授予目录权限
grant read, write on directory ##datapump to system container=all;

导出时修改目录参数即可:

expdp system/SysPassword1@PDB1 full=Y directory=##datapump dumpfile=DB10G.dmp logfile=expdpDB10G.log

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:24:04