现象:
- 创建并且打开一个新 PDB
conn sys/<PASSWORD>@<SERVICE_NAME> as sysdba
SQL> create pluggable database cdb1_pdb4 admin user admin identified by pass
file_name_convert=('cdb1_pdb0','cdb1_pdb4')
path_prefix='<FILESYSTEM_PATH>';
SQL> alter session set container=cdb1_pdb4;
SQL> alter pluggable database cdb1_pdb4 open;
- 通过一个具有权限的用户,获得 PDB 的 DATA_PUMP_DIR 目录路径
conn u1/<PASSWORD>@<SERVICE_NAME> as sysdba
SQL> select directory_path from dba_directories where directory_name='DATA_PUMP_DIR';
DIRECTORY_PATH
------------------------------------------------------------
<FILESYSTEM_PATH>
SQL> select oracle_maintained from dba_objects where object_type = 'DIRECTORY' and object_name = 'DATA_PUMP_DIR';
ORACLE_MAINTAINED
-----------------
Y
- 然后在 PDB 里面执行 "dbms_datapump_utl.create_default_dir":
SQL> create or replace directory DATA_PUMP_DIR as 'dpdump';
SQL> exec dbms_datapump_utl.CREATE_DEFAULT_DIR;
SQL> select DIRECTORY_PATH,ORIGIN_CON_ID from dba_directories where directory_name='DATA_PUMP_DIR' order by 2, 1;
DIRECTORY_PATH ORIGIN_CON_ID
------------------ ----------------------------
<FILESYSTEM_PATH> 1
<FILESYSTEM_PATH> 4
==> 这样我们在 PDB 里面得到了两个 DATA_PUMP_DIR 条目,一个是PDB创建的时候的 common 对象,另外一个是指向 PATH_PREFIX/dpdump 的本地对象,此时如果在这个 PDB 环境开启一个新的 DataPump 任务并且不指定 DIRECTORY 参数,那么它会以 ORA-1422 错误而失败。
> expdp system/<PASSWORD>@<TNS_NAME>Export: Release 12.2.0.1.0 - Development on Tue Nov 28 23:40:00 2017 Version 12.2.0.1.0
ORA-39006: internal errorORA-39065: unexpected master process exception in DISPATCHORA-1422: exact fetch returns more than requested number of rowsORA-6512: at "SYS.KUPF$FILE", line 4645ORA-6512: at "SYS.KUPF$FILE", line 4619ORA-6512: at "SYS.KUPF$FILE", line 4607ORA-6512: at "SYS.KUPM$MCP", line 4329ORA-39097: Data Pump job encountered unexpected error -1422
Attachments :
原因:
升级到了 12.2.
该问题已经在 12.2 上的如下未公开bug中定位:
Unpublished Bug 27194511 : SV12.2DBSA: DATAPUMP_UTL.CREATE_DEFAULT_DIR POPULATES DATA_PUMP_DIR INCORRECTLY
不过以上bug的修复有问题,它在19.1上的如下的未公开bug中得以修正
Unpublished Bug 28360226 - ERROR CREATING DATA_PUMP_DIR DIRECTORY OBJECT IN PDB DURING AN UPGRADE
解决方案:
除非可以升级到19.1,在 PDB 环境中采用 non-default 的 Datapump 目录来执行导出导入操作以绕开此问题。
|