一、故障背景
客户一套 19.3.0 Oracle 19c 单机数据库,执行 expdp 数据泵导出数据报错ORA-31626,导出任务直接中断无法执行。
二、测试过程
测试导出scott 用户全库时,执行导出命令:
[oracle@zonghedg ~]$ expdp \'/ as sysdba\' directory=DATA_PUMP_DIR dumpfile=scott.dmp logfile=scott.log schemas=scott < /dev/null
Export: Release 19.0.0.0.0 - Production on Mon Jun 15 17:12:33 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Password:
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
ORA-31626: job does not exist
ORA-31638: cannot attach to job SYS_EXPORT_SCHEMA_01 for user SYS
ORA-06512: at "SYS.KUPV$FT", line 1142
ORA-06512: at "SYS.KUPV$FT", line 1744
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.KUPV$FT_INT", line 498
ORA-39077: unable to subscribe agent KUPC$A_1_171235164054000 to queue "KUPC$C_1_20260615171234_0"
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.KUPC$QUE_INT", line 294
ORA-01001: invalid cursor
ORA-06512: at "SYS.DBMS_AQADM_SYS", line 9613
ORA-06512: at "SYS.DBMS_PRVTAQIS", line 1420
ORA-06512: at "SYS.DBMS_AQADM_SYS", line 10207
ORA-06512: at "SYS.DBMS_AQADM_SYS", line 9576
ORA-06512: at "SYS.DBMS_AQADM", line 881
ORA-06512: at "SYS.KUPC$QUE_INT", line 267
ORA-06512: at "SYS.KUPC$QUE_INT", line 1360
ORA-06512: at line 1
ORA-06512: at "SYS.KUPC$QUEUE_INT", line 65
ORA-06512: at "SYS.KUPV$FT_INT", line 465
ORA-06512: at "SYS.KUPV$FT", line 1664
ORA-06512: at "SYS.KUPV$FT", line 1103
关键报错信息:
ORA-31626/31638:数据泵任务不存在、无法挂载导出任务,也就是根本没生成任务;
ORA-01001 invalid cursor:无效游标,底层 AQ 高级队列组件异常;
ORA-39077:数据泵代理无法订阅 AQ 队列,数据泵底层依赖 AQ 消息队列做任务调度,队列损坏直接导致 expdp 完全失效。
三、重建数据泵核心组件
步骤 1:19c重建数据泵核心组件dpload.sql
数据泵依赖 KUPV、KUPC 系列系统包,清单损坏后包体失效,先重新部署数据泵底层对象:
SQL> @$ORACLE_HOME/rdbms/admin/dpload.sql
步骤 2:编译数据库所有失效对象 utlrp.sql
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
四、再次尝试备份
[oracle@zonghedg ~]$ expdp \'/ as sysdba\' directory=DATA_PUMP_DIR dumpfile=scott.dmp logfile=scott.log schemas=scott < /dev/null
Export: Release 19.0.0.0.0 - Production on Mon Jun 15 17:12:33 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Password:
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
UDE-31623: operation generated ORACLE error 31623
ORA-31623: a job is not attached to this session via the specified handle
ORA-06512: at "SYS.DBMS_DATAPUMP", line 4747
ORA-06512: at "SYS.KUPV$FT_INT", line 2144
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79
ORA-06512: at "SYS.KUPV$FT_INT", line 2081
ORA-06512: at "SYS.DBMS_DATAPUMP", line 2263
ORA-06512: at "SYS.DBMS_DATAPUMP", line 4496
ORA-06512: at "SYS.DBMS_DATAPUMP", line 6127
ORA-06512: at line 1
发现报错已经变化,检查alert日志:

五、修复Oracle Inventory产品清单(OPatch报错73)
[oracle@zonghedg OPatch]$ ./opatch lsinv
Oracle 临时补丁程序安装程序版本 12.2.0.1.17
版权所有 (c) 2026, Oracle Corporation。保留所有权利。
Oracle 主目录 :/oracle/app/product/19.3.0/db_1
主产品清单:/oracle/oraInventory
来自 :/oracle/app/product/19.3.0/db_1/oraInst.loc
OPatch 版本 :12.2.0.1.17
OUI 版本 :12.2.0.7.0
日志文件位置:/oracle/app/product/19.3.0/db_1/cfgtoollogs/opatch/opatch2026-06-15_17-35-12下午_1.log
LsInventorySession 失败: OPatch 无法找到主产品清单。
原因可能是:
该主产品清单已损坏
指定的 oraInst.loc 文件无效。
OPatch failed with error code 73
检查oraInst.loc
[oracle@zonghedg OPatch]$ cat /oracle/app/product/19.3.0/db_1/oraInst.loc
inventory_loc=/oracle/oraInventory
inst_group=oinstall
路径配置无误,但 inventory.xml 丢失 Home 注册信息:
[oracle@zonghedg oraInventory]$ cat ContentsXML/inventory.xml
<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2024, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
<SAVED_WITH>12.2.0.7.0</SAVED_WITH>
<MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>
手工增加补充inventory.xml中 HOME_LIST 节点,写入当前db_1主目录信息
[oracle@zonghedg oraInventory]$ cat ContentsXML/inventory.xml
<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2024, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
<SAVED_WITH>12.2.0.7.0</SAVED_WITH>
<MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME="OraDB19Home1" LOC="/oracle/app/product/19.3.0/db_1" TYPE="O" IDX="1"/>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>
修复后
./opatch lsinv
正常输出补丁版本、PSU/BP 补丁信息,不再报 error code 73。
但是数据泵备份还是报错ORA-31623。
六、解决
查找mos上有一篇文档
How to resolve the Data Pump error ORA-31623 UDE-31623(a job is not attached to this session via the specified handle)?(Doc ID 1907256.1)
提到V$VERSION与REGISTRY$HISTORY版本不匹配会造成这个错误:

查询结果确实不匹配:

原因也找到了,客户主库和备份版本补丁不一致,主备切换后,由于版本不一致导致备份异常,把补丁打到19.22,问题解决。
1019

被折叠的 条评论
为什么被折叠?



