Oracle事务槽wrap#上限问题

问题背景:

        近期遇到了一个Oracle回滚段事务ID达到上限的问题,应用前台语句操作失败,出现ORA-01558: out of transaction ID's in rollback segment _SYSSMU10_4119033733$报错。

问题分析:

        第一次遇到该报错,先到Oracle mos上查了一下ORA-01558报错的相关资料,找到了一个比较接近的案例,MOS ID:Bug 19700135 - ORA-600 [4187] when the undo segment wrap# is close to the max value of 0xffffffff (Doc ID 19700135.8),根据文章的描述,报错产生的原因是由于回滚段里面的事务槽由于事务的频繁申请,导致wrap#达到上限值0xffffffff(4294967295),致使事务申请失败,事务槽每分配给一个事务,wrap#就会递增,每次的递增值并不固定,但单次递增值不超过16。

        文档还给出了一条查询语句,用户确认当前回滚段是否出现wrap#达到了上限值的问题,通过查询undo基表x$ktue([K]ernel [T]ransaction [U]ndo transaction [E]ntry),找出wrap#在[-429496730,0]区间的回滚段

select b.segment_name, b.tablespace_name 
         ,a.ktuxeusn "Undo Segment Number"
         ,a.ktuxeslt "Slot"
         ,a.ktuxesqn "Wrap#"
   from  x$ktuxe a, dba_rollback_segs b
   where a.ktuxesqn > -429496730 and a.ktuxesqn < 0
       and a.ktuxeusn = b.segment_id;

        在报错的数据库执行该查询语句,可以看到查询出来回滚段的确为报错回滚段_SYSSMU10_4119033733$,但这里为啥使用这个范围条件[-429496730,0]进行查询,包括查出来wrap#的数量含义,哪个事务槽有问题,文章并没有进行详细说明,为此,我对回滚段的wrap#上限值进行了研究测试。

回滚段事务槽warp#上限研究测试:

        我们以UNDOTBS1表空间里面的一个回滚段_SYSSMU3_2471395754作为研究测试对象,dump出了回滚段的头块。

---使用dump undo header
alter system dump undo header '_SYSSMU3_2471395754$';
---也可以通过dba_segments查出回滚段的头块ID,再通过dump datafile方式
alter system dump datafile 3 block 128;

       分析dump的回滚段头信息,单个回滚段里面34个事务槽,从0开始,每一个事务槽都有各自对应的wrap#大小,这里我们将研究测试的对象缩小到0号槽0x00,当前的wrap#为0x0fae,转成10进制为4014。

        再通过x$ktue查询该回滚段的wrap信息,可以看到列ktuxeslt和ktuxesqn分别对应事务槽slot和wrap#,查到到数值为0和4014,与dump回滚段头信息一致。

select b.segment_name, b.tablespace_name 
             ,a.ktuxeusn "Undo Segment Number"
             ,a.ktuxeslt "Slot"
             ,a.ktuxesqn "Wrap#"
       from  x$ktuxe a, dba_rollback_segs b
       where a.ktuxeusn = b.segment_id and b.segment_name='_SYSSMU3_2471395754$';

        使用bbed打开回滚段所在的块,通过find命令查询事务槽的offset,需要注意的是对于Linux,由于字节序是little-endian,所以要低位开始读取,比如dump文件里面的wrap#为00000fae,在bbed显示的顺序为ae0f0000,所以查找wrap#的位置通过find /x ae0f,查到0号槽的wrap#的offset为6200-6203。

        通过bbed修改0号槽的wrap#的offset为上限值ffffffff,模拟wrap#达到上限值。

        再次查看x$ktue里面回滚段0号槽的wrap#大小,可以看到wrap#显示的值为-1。

       通过set transaction user rollback segment方式测试事务指定使用wrap#为-1槽所在的回滚段,看看会出现什么样的问题。

begin
for i in 1..100000 loop
 set transaction USE ROLLBACK SEGMENT "_SYSSMU3_2471395754$";
 delete from test.test where rownum<2;
 commit;
end loop;
end;
/

        可以看到操作会话直接异常断开ORA-03113,并且后台日志出现大量的ORA-00600: internal error code, arguments: [4194], [], [], [], [], [], [], [], [], [], [], []报错,语句无法正常执行。

        通过bbed重新修改wrap#为fffffffa(4294967290)离上限值只差距5。

        再次查看x$ktue里面回滚段0号槽的wrap#大小,可以看到wrap#显示的值为-6。

        再次通过set transaction user rollback segment测试事务指定使用wrap#为-6的回滚段,可以看到这一次复现了ORA-01558: out of transaction ID's in rollback segment _SYSSMU3_2471395754$的报错。

       再次查看x$ktue里面回滚段0号槽的wrap#大小值为-2,没有再变化,接近最大值ffffffff。

        修改wrap#为最大值的一半:7fffffff,可以看到x$ktue里面显示的值为2147483647。

        修改wrap#为最大值的一半加1:80000000,可以看到x$ktue里面显示的值为-2147483647。所以,x$ktue里面显示的wrap#的值范围将ffffffff且为了两段,第一段[0,2147483647],第二段[-2147483647,-1]。wrap#越接近-1的代表该事务槽slot接近上限。

        这时候我们再看回mos文档给的查询语句,a.ktuxesqn > -429496730 and a.ktuxesqn < 0查询条件的含义就是查询wrap#的值范围接近ffffffff上限的事务槽

        而之前问题查到的结果回滚段_SYSSMU10_4119033733$事务槽里面slot 14的wrap#为-17,接近上限值-1,就是导致出现ORA-01558: out of transaction ID's in rollback segment _SYSSMU10_4119033733$报错的原因。

问题修复:

        对于回滚段事务槽达到上限的,可以通过重建undo表空间的方法进行修复。

        注:重启数据库,不会导致回滚段wrap#清空。

        重建undo表空间的操作步骤。

--创建新的undo表空间
SQL> create undo tablespace <New Undo Tablespace name> datafile size <new size>;
--设置当前的默认表空间为新undo表空间
SQL> alter system set undo_tablespace=<New Undo Tablespace name>;
--查看旧undo表空间是否存在online的回滚段,即使切换了默认的undo表空间,已经被事务分配使用的旧undo回滚段依然在使用,直到事务提交之后才释放
SQL> select status,segment_name from dba_rollback_segs where status not in ('OFFLINE') and tablespace_name=<undo tablespace to be dropped>;
--需要等待旧undo表空间没有online的回滚段才能drop 旧的undo表空间
SQL>Drop tablespace <tablespace_name> including contents and datafiles;
​

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

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

相关文章

[CISCN2019 华东南赛区]Web11

模块注入题&#xff0c;这类题一般拥有固定的payload。 界面大概就是这么个样子 返回了IP地址&#xff0c;提示getip&#xff0c;xff等。 这是smarty模板。很明显了&#xff0c;这个模板存在xff处的命令执行。抓取数据包并添加字段 X-Forwarded-For:{{system(ls)}} cat /fla…

【数据结构和算法初阶(C语言)】队列实操(概念实现+oj题目栈和队列的双向实现,超级经典!!!)

1. 队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c; 队列具有先进先出 FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾 出队列&#xff1a;进行删除操作的一端称为…

基于嵌入式的智能交通信号灯管理系统的设计与实现

项目介绍 有目共睹电子设备已经席卷了整个人类生活&#xff0c;他们不断改善着人们的起居住行&#xff0c;这也就促进了嵌入式人工智能的快速发展。 本课设模拟系统分为软硬件两部分组成。硬件部分是由两位8段数码管和LED灯构成的显示系统和控制电路等组成&#xff0c;能较好的…

疫情网课管理系统|基于springboot框架+ Mysql+Java+Tomcat的疫情网课管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 ​编辑 学生功能模块 管理员功能 教师功能模块 系统功能设计 数据库E-R图设计 lun…

JVM 相关知识点记录

文章目录 前言哪些内存需要回收方法区的垃圾回收垃圾收集算法垃圾收集器年轻代进入老年代条件内存担保机制FullGC 触发时机GC日志解析日志参数 前言 JVM包含内容&#xff1a; 类装载子系统(Class Load SubSystem)运行时数据区(Run-Time Data Areas) 堆栈 局部变量表操作数栈动…

YOLOV5 部署:QT的可视化界面推理(创建UI,并编译成py文件)

1、前言 之前用YOLOV5 做了一个猫和老鼠的实战检测项目,本章将根据之前训练好的权重进行部署,搭建一个基于QT的可视化推理界面,可以检测图片和视频 本章使用的数据集和权重参照:YOLOV5 初体验:简单猫和老鼠数据集模型训练-CSDN博客 可视化界面如下: 2、安装Pyside6 本…

如何理解闭包

闭包是编程语言中一个重要的概念&#xff0c;特别是在函数式编程中常常会遇到。以下是对闭包的理解&#xff1a; 1. 定义&#xff1a; 闭包是一种函数&#xff0c;它引用了在其定义范围之外的自由变量&#xff08;非全局变量&#xff09;&#xff0c;并且这些引用的变量在函数…

二叉树最长路径问题(x+1,x++,++x 问题详解)

首先遇到的问题是&#xff0c;在二叉树求最短路径中&#xff0c;DFS参数x的传入导致的结果不同问题 #include<iostream> #include<iomanip> #include<cstring> using namespace std; int maxi; char path[1000],ans[1000]; typedef struct BiTLnode{char da…

上海亚商投顾:沪指三连阴 创新药、资源回收概念逆势走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日冲高回落&#xff0c;深成指、创业板指午后跌超1%&#xff0c;临近尾盘跌幅有所收窄。创新药板块…

牛客-DP38 【模板】二维差分

【模板】二维差分_牛客题霸_牛客网 (nowcoder.com) b站有视频&#xff1a;讲解前缀和和差分 二维差分_哔哩哔哩_bilibili 注意&#xff1a;差分的过程叫差分&#xff0c;而不仅仅是d[]这个数组&#xff0c;其他数组经行了差分的操作&#xff0c;就也是差分啊&#xff01;&…

搭建Docker私有仓库registry

下载registry registry是Docker官方提供的仓库镜像 拉取镜像&#xff0c;不指定版本默认拉取最新版本镜像。 docker pull registry Using default tag: latest latest: Pulling from library/registry 79e9f2f55bf5: Pull complete 0d96da54f60b: Pull complete 5b27040df4…

算法---滑动窗口练习-3(水果成篮)

水果成篮 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;水果成篮 2. 讲解算法原理 算法的主要思想是使用滑动窗口来维护一个包含最多两种水果的子数组。定义两个指针 left 和 right 分别表示窗口的左边界和右边界。还定义了一个数组 hash 来记录水…

数据结构的美之链表和树

有种感觉叫做&#xff0c;不同的场景&#xff0c;应用不同的数据结构和算法&#xff0c;可以大大滴优化增删改查以及存储方面等等的性能。笔者这里呢也是在最近复习准备面试的时候&#xff0c;去阅读源码&#xff0c;觉得设计这种数据结构和引用的人真的是非常牛逼&#xff0c;…

Unity Timeline学习笔记(3) - SignalTrack信号轨道和自定义带参数的Marker信号和轨道

信号轨道&#xff0c;顾名思义就是运行到某处发送一个信号。 普通用法 普通用法就是没有任何封装的&#xff0c;个人感觉特别难用&#xff0c;但是有必要理解一下工作原理。 添加信号 我们添加一个信号资源 生成后可以看到资源文件&#xff0c;这个是可以拖到SignalTrack上…

2 Redis的安装与配置

这里是要将 Redis 安装到 Linux 系统中。 1.1 Redis 的安装 1.1.1 克隆并配置主机 修改主机名&#xff1a;/etc/hostname修改网络配置&#xff1a;/etc/sysconfig/network-scripts/ifcfg-ens33 1.1.2 安装前的准备工作 &#xff08;1 &#xff09;安装 gcc &#xff08;2…

0301taildir-source报错-flume-大数据

1 基础环境简介 linux系统&#xff1a;centos&#xff0c;前置安装&#xff1a;jdk、hadoop、zookeeper、kafka&#xff0c;版本如下 软件版本描述centos7linux系统发行版jdk1.8java开发工具集hadoop2.10.0大数据生态基础组件zookeeper3.5.7分布式应用程序协调服务kafka3.0分…

私域运营的模式

私域运营的模式 | 想要建立私域流量&#xff0c;但由于对私域流量的认知不够全面&#xff0c;不知道该从何处着手进行落地实施。 整理了私域建设的五个主要模式一个SOP 供大家参考。 需要明确的是&#xff0c;每种模式都有各自的利弊&#xff0c;并不存在绝对的优劣之分。最重要…

国创证券策略:股指预计维持震荡格局 关注汽车、通信设备等板块

国创证券指出&#xff0c;近期两市指数持续反弹创新高&#xff0c;但沪指现已率先出现滞涨状况&#xff0c;一起均已进入阻力重压区。不过当时技术形状上坚持较好&#xff0c;可持续做多&#xff0c;一旦跌破重要支撑如沪指的3030点&#xff0c;则需降仓防卫&#xff0c;防止指…

CompletionService 处理异步任务

案例: public static void main(String[] args) throws Exception {ExecutorService executorService Executors.newCachedThreadPool();ArrayList<Future<Integer>> list new ArrayList<>();Future<Integer> future_15 executorService.submit(()…

海外媒体宣发套餐推广:如何选择最佳方案-华媒舍

在信息时代&#xff0c;传播和宣传已经成为各个行业发展的关键部分。尤其对于拓展国际市场的企业来说&#xff0c;海外媒体宣发更是至关重要。由于各种原因&#xff0c;很多企业在选择海外媒体宣发套餐时感到困惑。本文将为您介绍如何选择最佳的海外媒体宣发方案。 1.了解目标市…