Oracle运维笔记之EXPDP报错ORA-39077和ORA-31638

简介: Oracle运维笔记之EXPDP报错ORA-39077和ORA-31638

客户的生产库在做日常数据expdp导出时报错:

ORA-31626: job does not exist
ORA-31638: cannot attach to job SYS_EXPORT_TABLE_01 for user SYS
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.KUPV$FT_INT", line 428
ORA-39077: unable to subscribe agent KUPC$A_1_191136568928000 to queue "KUPC$C_1_20140807191136"
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.KUPC$QUE_INT", line 250
ORA-06502: PL/SQL: numeric or value error: character string buffer too small

MOS上的文档16928674.8和2383405.1,指出了该错误是一个BUG,其原因是每次datapump命令执行后,序列SYS.AQ$_KUPC$DATAPUMP_QUETAB_1_N都会增加,如果多次执行后,SYS.AQ$_KUPC$DATAPUMP_QUETAB_1_N的值超过6位数,那么expdp就会报错ORA-39077和ORA-31638。
图片.png

同时文档中也给出了解决方案,那就是打补丁,该补丁的作用是在SYS.AQ$_KUPC$DATAPUMP_QUETAB_1_N的值增长到6位数时,重建该序列,expdp或者impdp可能会报出同样的错误,再次执行命令即可。
图片.png

根据补丁的描述,官方的方法是重建序列SYS.AQ$_KUPC$DATAPUMP_QUETAB_1_N,那么我们也可以通过手工重建的方式来规避错误,以下是重建语句,重建后的sequence的参数和原来保持一致。

drop sequence AQ$_KUPC$DATAPUMP_QUETAB_1_N;
create sequence AQ$_KUPC$DATAPUMP_QUETAB_1_N minvalue 1 maxvalue 9999999999999999999999999999 start with 1 increment by 1 cache 20 nocycle;

接下来做个测试,来验证手工重建序列是否有效。
1.查看当前的序列值,当前值是175

select AQ$_KUPC$DATAPUMP_QUETAB_1_N.nextval from dual;

nextval

  175

2.做一个简单的expdp导出

expdp "'" / as sysdba"'" directory=dump schemas=scott dumpfile=scott.dmp logfile=scott.log

3.再次查看序列值,发现是增加了,现在是182

select AQ$_KUPC$DATAPUMP_QUETAB_1_N.nextval from dual;

nextval

  182

4.修改序列值,让大小接近999999

alter sequence AQ$_KUPC$DATAPUMP_QUETAB_1_N increment by 999816;
select AQ$_KUPC$DATAPUMP_QUETAB_1_N.nextval from dual;

nextval

999998

5.再次执行expdp命令,发现的确是报错了,ORA-39077和ORA-31638

expdp "'" / as sysdba"'" directory=dump schemas=scott dumpfile=scott.dmp logfile=scott.log
ORA-31626: job does not exist
ORA-31638: cannot attach to job SYS_EXPORT_SCHEMA_01 for user SYS
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.KUPV$FT_INT", line 428
ORA-39077: unable to subscribe agent KUPC$A_1_174305386572000 to queue "KUPC$C_1_20201103174305"
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.KUPC$QUE_INT", line 254
ORA-06502: PL/SQL: numeric or value error: character string buffer too small

6.接下来重建序列

drop sequence AQ$_KUPC$DATAPUMP_QUETAB_1_N;
create sequence AQ$_KUPC$DATAPUMP_QUETAB_1_N minvalue 1 maxvalue 9999999999999999999999999999 start with 1 increment by 1 cache 20 nocycle;

再次执行expdp导出,这次导出成功,说明重建也是可以解决ORA-39077和ORA-31638报错的,但是还是推荐采用官方方法,也就是打补丁来解决这个问题,而且补丁不大,可以回退。

相关文章
|
6月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
8月前
|
运维 监控 中间件
Linux运维笔记 - 如何使用WGCLOUD监控交换机的流量
WGCLOUD是一款开源免费的通用主机监控工具,安装使用都非常简单,它可以监控主机、服务器的cpu、内存、磁盘、流量等数据,也可以监控数据库、中间件、网络设备
|
10月前
|
Oracle 关系型数据库 MySQL
【YashanDB知识库】oracle dblink varchar类型查询报错记录
这篇文章主要介绍了 Oracle DBLINK 查询崖山 DB 报错的相关内容,包括 ODBC 安装配置、数据源配置、dblink 环境配置、问题原因分析及规避方法。问题原因是 dblink 连接其他数据库时 varchar 类型转换导致的,还介绍了 long 类型限制、char 等类型区别,规避方法是修改参数 MAX_STRING_SIZE 支持 32K。
|
12月前
|
Oracle 关系型数据库 数据库
【YashanDB知识库】oracle dblink varchar类型查询报错记录
在使用Oracle DBLink查询VARCHAR类型数据时,可能会遇到多种报错。通过了解常见错误原因,采取合适的解决方法,可以有效避免和处理这些错误。希望本文提供的分析和示例能帮助你在实际工作中更好地处理DBLink查询问题。
386 10
|
运维 Java 关系型数据库
【Java笔记+踩坑】SpringBoot基础2——运维实用
SpringBoot程序的打包与运行、临时配置、多环境配置、日志
【Java笔记+踩坑】SpringBoot基础2——运维实用
|
SQL 运维 Oracle
入门级Oracle 11g日常运维命令总结
入门级Oracle 11g日常运维命令总结
920 1
|
运维 Oracle 前端开发
Oracle 11g RAC集群日常运维命令总结
Oracle 11g RAC集群日常运维命令总结
580 2
|
数据采集 运维 监控
运维笔记:流编辑器sed命令用法解析
运维笔记:流编辑器sed命令用法解析
452 5
|
应用服务中间件 API 网络安全
运维笔记:宿主机转发实现多容器复用CA证书
运维笔记:宿主机转发实现多容器复用CA证书
281 4
|
运维 安全 网络安全
运维笔记:基于阿里云跨地域服务器通信
运维笔记:基于阿里云跨地域服务器通信
1090 1

推荐镜像

更多