关于oracle中的undo

news/2024/10/6 4:16:59/文章来源:https://www.cnblogs.com/hgboy/p/18285929

一,undo介绍

二,undo视图说明

三,常用脚本说明

四.释放UNDO表空间

五.参考

一,undo介绍
Oracle中 undo的作用主要有两个:第一是回滚事务,第二是产生一致性读。同时也衍生出了一些新的 功能,比如Flashback query。传统的 undo是通过undo segment 来管理的,我们看下面的示例:

详见第二篇文章《oracle undo原理》

二,undo视图说明
DBA_ROLLBACK_SEGS
V$ROLLSTAT
V$TRANSACTION
V$UNDOSTAT
DBA_UNDO_EXTENTS
DBA_UNDO_EXTENTS describes the extents comprising the segments in all undo tablespaces in the database. This view shows the status and size of each extent in the undo tablespace.

DBA_UNDO_EXTENTS.STATUS有三个值:

ACTIVE 表示未提交事务还在使用的UNDO EXTENT,该值对应的UNDO SEGMENT的DBA_ROLL_SEGMENTS.STATUS一定是ONLINE或PENDING OFFLINE状态,一旦没有活动的事务在使用UNDO SEGMENT,那么对应的UNDO SEGMENT就变成OFFLINE状态。
EXPIRED 表示已经提交且超过了UNDO_RETENTION指定时间的UNDO EXTENT。
UNEXPIRED 表示已经提交但是还没有超过UNDO_RETENTION指定时间的UNDO EXTENT。
Oracle重复使用UNDO EXTENT的原则如下:
ACTIVE状态的EXTENT在任何情况下都不会被占用。
如果是自动扩展的UNDO表空间,Oracle会保证EXTENT至少保留UNDO_RETENTION指定的时间。
如果自动扩展空间不足或者UNDO表空间是非自动扩展,Oracle会尝试重复使用同一个段下面EXPIRED状态的EXTENT,如果本段中没有这样的EXTENT,就会去偷别的段下面EXPIRED状态的EXTENT,如果依然没有这样的EXTENT,就会使用本段UNEXPIRED的EXTENT,如果还是没有,那么会去偷别的段的UNEXPIRED的EXTENT,这个都没有,就会报错。
三,常用脚本说明
1.undo表空间总大小

select tablespace_name,contents from dba_tablespaces where tablespace_name='UNDOTBS1';select tablespace_name,sum(bytes)/1024/1024 mb from dba_data_files where tablespace_name='UNDOTBS1'  group by tablespace_name;

2.查看undo表空间的使用情况 有两个视图可查

select segment_name, v.rssize/1024/1024 mbFrom dba_rollback_segs r, v$rollstat vWhere r.segment_id = v.usn(+)order by segment_name ;

select owner,segment_name,bytes/1024/1024 mb from dba_segments where tablespace_name='UNDOTBS1'

3.查询事务使用的UNDO段及大小

-- 我的UNDO表空间超过了90%,是哪些会话的事务占用了这些空间:

select s.sid,s.serial#,s.sql_id,v.usn,segment_name,r.status, v.rssize/1024/1024 mbFrom dba_rollback_segs r, v$rollstat v,v$transaction t,v$session sWhere r.segment_id = v.usn and v.usn=t.xidusn and t.addr=s.taddrorder by segment_name ;

进一步查询,可知下面的sql占用了大部分的undo

4.查询每秒使用的undo表空间大小

select ur undo_retention,dbs db_block_size,((ur * (ups * dbs)) + (dbs * 24))  1024  1024 as "M_bytes"from (select value as ur from v$parameter where name = 'undo_retention'),(select (sum(undoblks)  sum(((end_time - begin_time) * 86400))) upsfrom v$undostat),(select value as dbs from v$parameter where name = 'db_block_size');

5.根据Oracle对UNDO表空间的统计信息调整UNDO参数及大小

SELECT TO_CHAR(BEGIN_TIME, 'MM/DD/YYYY HH24:MI:SS') BEGIN_TIME,TO_CHAR(END_TIME, 'MM/DD/YYYY HH24:MI:SS') END_TIME,UNDOTSN, UNDOBLKS, TXNCOUNT, MAXCONCURRENCY AS "MAXCON",MAXQUERYLEN, TUNED_UNDORETENTIONFROM v$UNDOSTAT;

通常当字段UNXPSTEALCNT和EXPBLKREUCNT是非零值,表示有空间压力。如果字段SSOLDERRCNT是非零值,表示UNDO_RETENTION设置不合理。如果字段NOSPACEERRCNT是非零值,表示有一系列空间问题。在10g DBA_HIST_UNDOSTAT视图包括了V

KTUSMST2将没有数据生成,该表是DBA_HIST_UNDOSTATS视图的源表。

V$UNDOSTAT视图,该视图的作用是用于指导管理员调整UNDO表空间的参数及表空间大小,每行表示的是10分钟的数据,最多可保留576行,4天一个周期,如果该视图没有数据,那么UNDO可能是手动管理方式。下面对该视图字段的含义进行说明:

6.查询undo表空间extent的使用情况

select sum(bytes)/1024/1024 MB, status, tablespace_namefrom dba_undo_extentsgroup by status, tablespace_name order by 3, 2;

四.释放UNDO表空间
详见:http://blog.itpub.net/23135684/viewspace-1065601/

新建一个undo表空间,然后修改undo_tablespace指向新的表空间,然后查询下面的视图,待原来的表空间上所有的段都为offline状态时才能删除。

查询

set line 200 pages 999
col segment_name format a30
col tablespace_name format a30
select segment_name, tablespace_name, r.status,(initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,max_extents, v.curext CurExtentFrom dba_rollback_segs r, v$rollstat vWhere r.segment_id = v.usn(+)order by segment_name ;

五.参考
监控和管理Oracle UNDO表空间的使用[1]

UNDO表空间监控说明[2]

里面有MOS中对AUM和SUM的描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

闪迪U盘数据恢复

一、检查并取消隐藏项目 连接U盘:首先,确保闪迪U盘与电脑稳定连接。 打开U盘目录:在电脑中找到并打开U盘所在的目录。 显示隐藏项目:在文件资源管理器的顶部菜单中,点击“查看”选项,并勾选“显示隐藏的项目”。如果数据只是被隐藏了,这一步应该能够显示出被隐藏的文件。…

移动硬盘坏道修复

一、使用系统自带的磁盘检查工具 如果使用的是Windows系统,可以通过系统自带的磁盘检查工具来尝试修复坏道。 连接移动硬盘:首先,确保移动硬盘已经通过USB线连接到电脑上,并且系统能够识别到它。 打开磁盘属性:在文件资源管理器中,右键点击移动硬盘的图标,选择“属性”。…

MyBatis-Plus-实用的功能自动填充字段

MyBatis-Plus-实用的功能自动填充字段前言: java项目用到了mybatis-plus,在一些类里面需要在更新时候,统一设置,修改人,修改ID,修改时间。新增时候设置 创建人,创建时间等 基础类:@Data public abstract class BaseModel implements Serializable {/*** 逻辑删除*/@Tabl…

BOSHIDA DC/AC电源模块在不同的电源类型之间进行转换

BOSHIDA DC/AC电源模块在不同的电源类型之间进行转换 电力转换是现代社会不可或缺的一部分,它使我们能够在不同的电源类型之间进行转换,从而满足各种设备和应用的需求。DC/AC电源模块是一种用于将直流电转换为交流电的设备,它在电子设备、太阳能系统、电池充电等领域发挥着重…

面试必会之SpringBootSpringCloud

01- 讲一讲SpringBoot自动装配的原理 1.在SpringBoot项目的启动引导类上都有一个注解@SpringBootApplication @SpringBootApplication @MapperScan("com.hxx.admin.dao") public class AdminApplication {public static void main(String[] args) {SpringApplication…

在Docker中搭建rabbit MQ集群 (Mac + OrbStack)

我以为用docker搭建一个rabbitMq集群会非常简单,但是结果却出乎意料,我花了差不多两个半天才搞定。这还是依赖了AI的协助,否则难度不敢想象。我的环境是Mac上的OrbStack。用了Kimi + 文心一言 + ChatGPT + Claude,还是Kimi价值最大。back and forth 的过程就不讲了,这里直…

信息安全驱动汽车行业快速向数字化转型

经纬恒润针对ISO/SAE 21434、WP.29 R155等法规进行了深入研究,结合多年功能安全、信息安全经验,可以为客户提供信息安全全流程解决方案。 开发一款安全性良好的软件是困难的,它需要专业知识的积累以及对常见编程缺陷和规则的了解,例如检查输入范围、管理内存分配和回…

Java进阶:HashMap底层原理(通俗易懂篇)

1.底层结构 Java 7及之前版本 在Java 7及之前的版本中,HashMap的底层数据结构主要是数组加链表。具体实现如下:数组:HashMap的核心是一个Entry数组(Entry<K,V>[] table),这个数组的大小总是2的幂。每个数组元素是一个单一的Entry节点,或者是一个链表的头节点。链表…

各类问题p~np

可以简单用下图来表示 p类问题指的是可以在多项式时间求解的问题,例如n个数的排序问题,复杂度最多为O^2 np类问题指的是可以在多项式时间验证答案的问题,例如求n个点的图是否有哈密顿路,最坏情况需要(n-1)!,但是验证是否为哈密顿路是多项式时间 nph类问题是任意np类问题在…

面试必会之Redis篇

01- 你们项目中哪里用到了Redis ? 在我们的项目中很多地方都用到了Redis , Redis在我们的项目中主要有三个作用 :使用Redis做热点数据缓存/接口数据缓存 使用Redis存储一些业务数据 , 例如 : 验证码 , 用户信息 , 用户行为数据 , 数据计算结果 , 排行榜数据等 使用Redis实现分…

linux部署cassandra

Cassandra数据库是一个高度可扩展、分布式的NoSQL数据库系统,最初由Facebook开发,用于处理大规模数据集并提供高可用性和高性能。随着其开源和广泛应用,Cassandra已经成为Apache软件基金会的一个顶级项目。以下是关于Cassandra数据库的详细介绍: 一、基本概述类型:Cassand…