Oracle:ORA-00600[4137]问题分析

背景:

        在为用户的新机房环境Oracle 19.18版本数据库检查时,发现smon进程后台日志不断出现事务恢复报错Serial Transaction recovery caught exception 30319,进一步检查发现存在事务恢复失败报ORA-00600[4137]

问题:

        smon进程后台日志不断出现事务恢复报错Serial Transaction recovery caught exception 30319

        查看发现当前数据库存在死事务XID:2043,3,15714202

select b.name useg, b.inst# instid, b.status$ status, a.ktuxeusn
 xid_usn, a.ktuxeslt xid_slot, a.ktuxesqn xid_seq, a.ktuxesiz undoblocks,
 a.ktuxesta txstatus
 from x$ktuxe a, undo$ b
 where a.ktuxecfl like '%DEAD%'
 and a.ktuxeusn = b.us#
​
USEG                               INSTID     STATUS    XID_USN   XID_SLOT    XID_SEQ UNDOBLOCKS TXSTATUS
------------------------------ ---------- ---------- ---------- ---------- ---------- ---------- ----------------
_SYSSMU2043_2627544207$                 2          3       2043          3   15714202          1 ACTIVE

        进一步检查发现是该事务xid:2043.3.15714202恢复出现报错ORA-00600-[4137]

问题分析:

        分析报错的错误信息ORA-00600: internal error code, arguments: [4137], [2043.3.15714202],错误类型4137是指在进行事务回滚或者恢复时出现undo段头的XID与undo块里面的XID不一致的情况,参数2043.3.15714202是报错的事务XID号

        分析ORA-600的trc文件信息,可以看到从block(71/928)里面解析出来的xid为0x07fb.003.00efc79a(2403,3,15714202),XID的第一位为事务所在的undo段ID:2403

        通过undo段ID:2403的段头,可以发现block(71/928)就是undo段头所在的块,即从undo段头里面解析出来的xid为0x07fb.003.00efc79a

        继续往下看trc文件里面udno段头的信息,可以看到xid:0x07fb.003.00efc79a指向的undo块地址为0x11c14fb1

        将undo块地址换成10进制11c14fb1-->297881521,查找对应的块文件号file为71,块BLOCK_ID为85937

        在trc文件里面,可以看到ORA-00600也dump出了该undo块(71/85937)的信息,undo块里面包含的xid为0x07fb.01c.00efdd31,这里undo块的xid与undo段头xid:0x07fb.003.00efc79a出现了不一致的情况

        通过dump undo block方式,从trc里面也同样可以看到出现xid不一致的情况

oradebug setmypidAlter system dump undo block '_SYSSMU2043_2627544207$' xid 2043 3 15714202;oradebug tracefile_name

        继续分析出现undo段头的XID与undo块里面的XID不一致的,通过查看SMON的trc文件,发现最早出现ORA-600[4137]的时间为2023-04-10T20:16:29

        进一步检查alert日志发现在出现ORA-600报错之前2023-04-10T20:08:45,数据库进行了主备切换的操作,进一步了解到,当晚新环境的数据库通过failover方式激活了数据库以进行应用测试工作

        综上,我们可以确认出现事务恢复失败的原因是因为数据库进行了failover方式的主备切换,导致数据库出现了undo段头的XID与undo块里面的XID不一致的问题

问题解决:

        对于undo段头的XID与undo块里面的XID不一致的问题,最好的恢复方式是通过备份重新进行恢复,但当前这个环境还是测试环境,可以选择通过重建undo表空间的方式进行恢复

        创建一个临时的undo表空间undotbs2_temp,并将报错所在的数据库节点二的默认表空间切换为undotbs2_temp

create undo tablespace undotbs2_temp datafile​ size 10G;
alter system set undo_tablespace=undotbs2_temp sid='xxxx2';

        但由于undo段_SYSSMU2043_2627544207$存在的事务没办法正常恢复,所以一直处于online状态

        尝试通过设置事件10513禁用事务恢复,重启数据库

SQL> alter system set  event ='10513 trace name context forever, level 2' sid='xxxx2' scope=spfile;
​
System altered.

​        重启数据库之后,看见undo段_SYSSMU2043_2627544207$的状态变为PARTLY AVAILABLE,这种情况下,依然不能进行undo的重建

 

        只能通过隐含参数_corrupted_rollback_segments忽略该回滚段

alter system set "_corrupted_rollback_segments"='_SYSSMU2043_2627544207$' scope=spfile;

        设置参数后再一次重启数据库,undo段_SYSSMU2043_2627544207$成功忽略,这次终于可以对undo表空间进行重建

--查询不到undo端_SYSSMU2043_2627544207$的信息
SQL> select segment_name,tablespace_name,status
  2  from dba_rollback_segs
  3  where tablespace_name='UNDOTBS2' and status='_SYSSMU2043_2627544207$';
​
no rows selected
--重建undo表空间
SQL> drop tablespace UNDOTBS2 including contents and datafiles;
​
SQL> create undo tablespace UNDOTBS2 datafile size 30g;
SQL> alter tablespace UNDOTBS2 add datafile size 30g;

        重建undo表空间之后,问题得以解决,smon进程的trc日志不再输出事务恢复失败的信息,死事务的信息也查询不到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/14702.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Steam-V Rising 私人服务器架设教程

一、安装前的准备 一台服务器 拥有公网IP并且做好了端口映射 二、使用SteamCMD安装服务器 1.下载SteamCMD SteamCMD是Steam专用的命令行式客户端程序,所有的安装方式可以参照:https://developer.valvesoftware.com/wiki/SteamCMD 或者在其他站点自行…

ThinkPHP6之数据库操作上

ThinkPHP6之数据库操作上 前言1. 数据库配置2. 数据库操作1. 查询操作2. 插入操作3. 修改4. 删除5. 其他 3.数据集总结 前言 注意,tp6在进行语法学习的时候都是在app/index.php中写代码的,代码写在index函数下面,而且tp6自带的文件都是由自动…

借助尾号限行 API 实现限行规则应用的设计思路分析

引言 尾号限行是指根据车牌号的末尾数字,规定某些时段内不能在特定区域行驶,这是城市交通管理的一种措施。尾号限行政策的实施可以缓解城市交通拥堵问题,减少环境污染和交通事故等问题。 尾号限行 API 是一种提供已知所有执行限行政策的城市…

Spring5学习总结(五)Spring5的新特性Log4j2@Nullable注解支持函数式风格支持JUnit5

Spring5学习总结(五)Spring5的新特性/Log4j2/Nullable注解/支持函数式风格/支持JUnit5 整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方法在代码库中删除 一、支持整合Log4j2 Spring 5.0 框架自带了…

【刷题】Java日常刷题1

A.Sort the Subarray 题意:给出一个数组,一个在此基础上被操作过的数组,找出被操作过的最长的非递减连续序列。 题解:这道题最开始写就被给的样例迷惑了,给出的样例都是被操作过出现非递减序列的片段,因此…

AI 时代的学习方式: 和文档对话

作者:明明如月学长, CSDN 博客专家,蚂蚁集团高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

AlgoC++第五课:基于矩阵的算法实现

目录 基于矩阵的算法实现前言1. 矩阵2. 矩阵求导推导3. 矩阵示例代码3.1 Matrix.hpp3.2 Matrix.cpp3.3 main.cpp3.4 拓展-cblas_sgemm3.5 拓展-LU分解 4. 多元线性回归5. 多元逻辑回归6. 最小二乘法7. 岭回归(L2)8. 多元牛顿法9. 高斯牛顿法10. Levenberg-Marquardt(修正牛顿法…

JavaWeb03(域对象EL表达式JSTL标签)

目录 一.jsp内置对象之域对象 1.1 什么是jsp的内置对象? JSP的内置对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员显式声明即可使用。一共有9个: 分别为request、response、session、application、out、pageContext、confi…

【音视频第16天】详解STUN协议

一个webRTC传输协议搞得自己云里雾里的。现在主动攻克一下。先看看STUN协议。好,我们开始吧 目录 1.讲讲什么是NAT?2.NAT有啥问题?3.四种NAT类型4.STUN Server5.TURN ServerSTUN和TURN的实现:什么是STUN?为什么需要ST…

js特殊对象 - RegExp对象(正则表达式)

1、概述 正则表达式用于定义一些字符串的规则,计算机可以根据正则表达式,来检查一个字符串是否符合规则,获取将字符串中符合规则的内容提取出来。 使用typeof检查正则对象,会返回object。 2、创建正则对象 2.1、使用对象创建 语法…

小程序开发费用估算:如何控制项目成本?

在当今数字化的时代,小程序已经成为了很多企业和个人开展业务的重要手段。小程序的开发需要耗费时间和资源,因此在项目初期,了解预计的开发费用是非常重要的。本文将详细介绍如何估算小程序开发费用以及如何控制项目成本。 小程序开发费用 …

用好Python自然语言工具包-- 实例“基于本地知识库的自动问答”

首先鸣谢thomas-yanxin 本问中示例来自他在GitHub上的开源项目“基于本地知识库的自动问答”,链接如下: thomas-yanxin/LangChain-ChatGLM-Webui: 基于LangChain和ChatGLM-6B的针对本地知识库的自动问答 (github.com) 目录 1. 基础知识: …

第四章——数学知识2

欧拉函数 欧拉函数表示的是1-n中与n互质数的个数。 如1-6中:1,5都和6互质,因此互质数为2 欧拉函数分解质因数后表示为: 互质数个数可表示为 int main() {int n;cin >> n;while(n--){int a;cin >> a;//分解质因数int r…

Spring Bean的作用域及生命周期

目录 前言: Bean的作用域(Scope) 单例模式 原型模式(多例作用域) 请求作用域(request) 会话作用域 全局作用域 网络长连接 Spring执行流程 Bean的生命周期 测试 小结: 前…

面试redis之两大金刚,你懂吗

前言 Redis持久化,一个老掉牙的问题,但是面试官就是喜欢问。这也是我们学Redis必会的一个知识点。Redis作为内存数据库,它工作时,数据都保存在内存里,这也是它为什么很快的一个原因。但存到内存里肯定是有丢数据的风险…

易基因:ChIP-seq等揭示热休克转录因子A1b调控植物高温胁迫响应的分子机制|应激反应

在拟南芥中,热休克转录因子A1b(HEAT SHOCK TRANSCRIPTION FACTORA1b,HSFA1b)通过影响种子产量来调控对环境胁迫的抗性。HSFA1b是生殖适应性的决定性因素,这种调控机制怎么形成的呢? 2018年,英国…

【微电网_储能】基于启发式状态机策略和线性程序策略优化方法的微电网中的储能研究【给定系统约束和定价的情况下】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

前端项目代码规范

一、变量与函数的命名(变量名和函数名是最好的注释) 通常情况下函数小陀峰、类名大陀峰、变量短横线/小陀峰、const全大写单词要表达出正确的语义,如:array类型或其它集合类型用英语复数格式、其它类型不要用复数格式区分函数为功…

【服务器】Linux搭建我的世界服务器 + 公网远程联机教程

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 前言 1. 安装JAVA 2. MCSManager安装 3.局域网访问MCSM 4.创建我的世界服务器 5.局域网联机测试 6.安装cpolar内网穿透 7. 配置公网访问地址 8.远程联机测试 9. 配置固定…

C++ 线程

linux使用线程 在linux使用线程可能出现,在编译时不会报错,但执行出错的问题。 undefined reference to pthread_create这是由于ubuntu平台下调用pthread_create()函数,pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 …