IMPDP时有2张表报ORA-31693 ORA-38500
适用范围
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-