重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

标题: 采用 DATA_PUMP_DIR 来 export/import 一个 PDB 时,12.2 DataPump 可能会因 ORA-1... [打印本页]

作者: 刘泽宇    时间: 5 天前
标题: 采用 DATA_PUMP_DIR 来 export/import 一个 PDB 时,12.2 DataPump 可能会因 ORA-1...
现象:
- 创建并且打开一个新 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 目录来执行导出导入操作以绕开此问题。






欢迎光临 重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2