首页 > 数据库 >关于oracle中的undo

关于oracle中的undo

时间:2024-07-05 15:33:27浏览次数:19  
标签:undo 1024 name UNDO 关于 EXTENT oracle segment

一,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 mb
    From dba_rollback_segs r, v$rollstat v
    Where 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 mb
    From dba_rollback_segs r, v$rollstat v,v$transaction t,v$session s
    Where r.segment_id = v.usn and v.usn=t.xidusn and t.addr=s.taddr
    order 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))) ups
          from 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_UNDORETENTION
  FROM 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_name
  from dba_undo_extents
  group 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 CurExtent
    From dba_rollback_segs r, v$rollstat v
    Where r.segment_id = v.usn(+)
    order by segment_name ;

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

UNDO表空间监控说明[2]

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

标签:undo,1024,name,UNDO,关于,EXTENT,oracle,segment
From: https://www.cnblogs.com/hgboy/p/18285929

相关文章

  • 关于那些想要转行AI的人:送你一份人工智能入门指南以及学习路线资料
    **人工智能是什么?人工智能为何重要?我们应该畏惧人工智能吗?**为什么突然之间所有人都在谈论人工智能?你可能会从网上知道人工智能如何为亚马逊和Google的虚拟助理提供支持,或者人工智能如何一步步地取代所有的工作(有争议的),但是这些文章极少很好的解释人工智能是什么(或者机器人......
  • Oracle数据库的日志切换策略
    Oracle数据库的日志切换策略是确保数据库稳定运行和事务连续性的关键机制之一。以下是对Oracle日志切换策略的详细解析1、自动日志切换1.1、重做日志切换:Oracle数据库使用重做日志文件(RedoLogFiles)来保证实例恢复。当当前的重做日志文件写满时,Oracle会自动进行日志切换......
  • Oracle数据库中RETURNING子句
    RETURNING子句允许您检索插入、删除或更新所修改的列(以及基于列的表达式)的值。如果不使用RETURNING,则必须在DML语句完成后运行SELECT语句,才能获得更改列的值。因此,RETURNING有助于避免再次往返数据库,即PL/SQL块中的另一个上下文切换。RETURNING子句可以返回多行数据,在这种......
  • DispatcherServlet类关于protected HandlerAdapter getHandlerAdapter解释
    /** *ReturntheHandlerAdapterforthishandlerobject. *@paramhandlerthehandlerobjecttofindanadapterfor *@throwsServletExceptionifnoHandlerAdaptercanbefoundforthehandler.Thisisafatalerror. */ protectedHandlerAdapter......
  • 关于虚拟机上不了网的解决办法
    先ping出ip地址  或者查询ifconfig得到目前网络信息继续输入命令Ifconfig-a查询是否能找到ip地址明显ens33是没有打开的,所以找不到分配的ip地址,需要打开,自动随机分配ip输入命令:sudo dhclient ens33现在就可以开始上网了......
  • 关于nginx HTTP安全响应问题
    目录一、背景二、http基本安全配置2.1host头攻击漏洞2.2httpmethod请求方式攻击漏洞2.3点劫持漏洞(X-Frame-Options)2.4X-Download-Options响应头缺失2.5Content-Security-Policy响应头缺失2.6Strict-Transport-Security响应头缺失2.7X-Permitted-Cross-Domain-Po......
  • 关于领域驱动设计,大家都理解错了
    翻遍整个互联网,我发现,关于领域驱动设计,大家都**理解错了**。今天,我们尝试通过一篇文章的篇幅,给大家展示一个完全不同的视角,把“领域驱动设计”这六个字解释清楚。##领域驱动设计学习资料现状 领域驱动设计的概念提出已经有20年的时间了,整个互联网充斥着大量书籍、文章和视......
  • 关于领域驱动设计,大家都理解错了
    翻遍整个互联网,我发现,关于领域驱动设计,大家都**理解错了**。今天,我们尝试通过一篇文章的篇幅,给大家展示一个完全不同的视角,把“领域驱动设计”这六个字解释清楚。##领域驱动设计学习资料现状 领域驱动设计的概念提出已经有20年的时间了,整个互联网充斥着大量书籍、文章和视频......
  • Create Operations and the Oracle Restart Configuration
    CreateOperationCreatedComponentAutomaticallyAddedtoOracleRestartConfiguration?CreateadatabasewithOUIorDBCAYesCreateadatabasewiththe CREATE DATABASE SQLstatementNoCreateanOracleASMinstancewithOUI,DBCA,orASM......
  • oraclelinux9.2内网升级OpenSSH9.8p1
    oraclelinux9.2内网升级OpenSSH9.8p1#备份SSHmkdir-p/etc/sshbakcp-rf/etc/ssh/*/etc/sshbakcp-rf/usr/bin/openssl/usr/bin/openssl.bakcp-rf/etc/pam.d/etc/pam.d.bakcp-rf/usr/lib/systemd/system/system.bakdnfinstall-ygccgcc-c++#上传3个压缩包,下载地......