IMPDP时有2张表报ORA-31693 ORA-38500

2026年7月6日 作者 XiaofeiHuangfu

适用范围
Oracle Database 11g
问题概述

在执行 Data Pump Import (impdp) 仅导入数据(CONTENT=DATA_ONLY)或追加数据时,特定业务表触发以下错误并跳过数据加载:

ORA-31693: Table data object “HR”.”EMP1″ failed to load/unload and is being skipped due to error:
ORA-38500: Unsupported operation: Oracle XML DB not present
ORA-31693: Table data object “HR”.”EMP2″ failed to load/unload and is being skipped due to error:
ORA-38500: Unsupported operation: Oracle XML DB not present
问题原因
Dump 文件(源端)中的表结构与目标数据库中已存在的表结构不一致。
解决方案
目标端创建与dump文件中业务表字段定义一致的表。
分析过程
1、检查IMPDP日志

impdp expoer/password@hrpdb directory=IMP_DIR dumpfile=emp2_20260604.dmp tables=hr.emp2 TABLE_EXISTS_ACTION= TRUNCATE Con ten t=DATA_ONLY logfile=impdp_emp2_20260701.log
Starting "EXPOR"."IMPDP_table successfullyloaded/unloaded02. log
...
ORA-31693: Table data object "HR"."EMP1" failed to load/unload and is being skipped due to error:
ORA-38500: Unsupported operation: Oracle XML DB not present
ORA-31693: Table data object "HR"."EMP2" failed to load/unload and is being skipped due to error:
ORA-38500: Unsupported operation: Oracle XML DB not present
Job "EXPOR"."SYS_IMPORT_TABLE_01" completed with 1 error(s) at 08:23:10

impdp时有2张表报ORA-31693,ORA-38500,HR用户下的EMP1和EMP2 impdp失败。
2、检查XDB组件状态

SQL> select substr(comp_id,1,15) comp_id, substr(comp_name,1,35) comp_name, substr(version,1,10) version, status from dba_registry order by modified;

COMP_ID         COMP_NAME                           VERSION    STATUS
--------------- ----------------------------------- ---------- -----------
EM              Oracle Enterprise Manager           11.2.0.3.0   VALID
CATPROC         Oracle Database Packages and Types  11.2.0.3.0   VALID
CATALOG         Oracle Database Catalog Views       11.2.0.3.0   VALID
OWM             Oracle Workspace Manager            11.2.0.3.0   VALID
CATJAVA         Oracle Database Java Packages       11.2.0.3.0   VALID
XDB             Oracle XML Database                 11.2.0.3.0   VALID
CONTEXT         Oracle Text                         11.2.0.3.0   VALID
EXF             Oracle Expression Filter            11.2.0.3.0   VALID
JAVAVM          JServer JAVA Virtual Machine        11.2.0.3.0   VALID
XML             Oracle XDK                          11.2.0.3.0   VALID
RUL             Oracle Rules Manager                11.2.0.3.0   VALID
ORDIM           Oracle Multimedia                   11.2.0.3.0   VALID
SDO             Spatial                             11.2.0.3.0   VALID
AMD             OLAP Catalog                        11.2.0.3.0   VALID
APS             OLAP Analytic Workspace             11.2.0.3.0   VALID
XOQ             Oracle OLAP API                     11.2.0.3.0   VALID
OWB             OWB                                 11.2.0.2.0   VALID
APEX            Oracle Application Express          3.2.1.00.1   VALID

XDB Oracle XML Database状态正常,报错应该不是XDB组件导致。

ORA-31693和ORA-38500的报错信息,一般时expdp的dumpfile文件与impdp时目标环境的表结构不一致导致。通常情况下,当dumpfile中的表元数据与目标数据库中已存在的表元数据存在差异时,IMPDP代码会尝试查找正确的元数据。为了检测元数据差异,impdp时使用了元数据代码,该代码内部Oracle XML Database (XDB) 功能来区分元数据XML。
报错信息是XML DB代码错误,并非数据库XDB组件功能的使用,而是由于Data Pump内部的XDB功能触发的报错。
3、检查业务表的结构

--源端
SQL>desc emp1
 Name                                      Null?    Type
 ----------------------------------------- -------- ------------------
 EMPLOYEE_ID                                        NUMBER(6)
 FIRST_NAME                                         VARCHAR2(20)
 LAST_NAME                                 NOT NULL VARCHAR2(25)
 PHONE_NUMBER                                       VARCHAR2(20)
 COMMISSION_PCT                                     NUMBER(2,2)
 MANAGER_ID                                         NUMBER(6)
 DEPARTMENT_ID                                      NUMBER(4)
SQL>desc emp2
 Name                                      Null?    Type
 ----------------------------------------- -------- ------------------
 EMPLOYEE_ID                                        NUMBER(6)
 FIRST_NAME                                         VARCHAR2(20)
 LAST_NAME                                 NOT NULL VARCHAR2(25)
 PHONE_NUMBER                                       VARCHAR2(20)
 COMMISSION_PCT                                     NUMBER(2,2)
 MANAGER_ID                                         NUMBER(6)
 DEPARTMENT_ID                                      NUMBER(4)

HR@hrpdb(HRPDB)>
                                           VARCHAR2(30)
--目标端
SQL>desc emp1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPLOYEE_ID                                        NUMBER(6)
 FIRST_NAME                                         VARCHAR2(20)
 LAST_NAME                                 NOT NULL VARCHAR2(25)
 PHONE_NUMBER                                       VARCHAR2(20)
 COMMISSION_PCT                                     NUMBER(2,2)
 MANAGER_ID                                         NUMBER(6)
 DEPARTMENT_ID                                      NUMBER(4)
 ADDRESS 
SQL>desc emp2
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPLOYEE_ID                                        NUMBER(6)
 FIRST_NAME                                         VARCHAR2(20)
 LAST_NAME                                 NOT NULL VARCHAR2(25)
 PHONE_NUMBER                                       VARCHAR2(20)
 COMMISSION_PCT                                     NUMBER(2,2)
 MANAGER_ID                                         NUMBER(6)
 DEPARTMENT_ID                                      NUMBER(4)
 ADDRESS 

经过比对,expdp的源端HR用户下的emp1和emp2表结构与impdp的目标环境不一致。

小结:impdp时使用 TABLE_EXISTS_ACTION=TRUNCATE 或 APPEND 且仅导入数据时,Data Pump 内部代码需要比对元数据以确保字段能正确映射。此比对过程在内部会调用元数据 XML 解析引擎。如果两端结构不匹配,内部 XML 解析逻辑会触发 ORA-38500 错误。

建议:在11g版本中进行impdp时业务用户表结构源与目标端应该保持一致,防止应字段不一致导致作业失败以及影响业务。
-the end-