问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Oracle的UNDO表空间使用率100%,是真的满了吗

发布网友 发布时间:2022-04-09 06:33

我来回答

2个回答

懂视网 时间:2022-04-09 10:54

Tablespace

Allocated

Free

Used

% Free

% Used

192.168.xxx.xxx:1521

UNDOTBS1

16384

190.25

16193.75

1.16

99

 

使用一些SQL分析了undo表空间使用情况,以及undo segment状态等等,非常想定位到是哪个或那些SQL耗尽了UNDO表空间,但是没有一个SQL能实现我的想法,抑或是我不了解。

SELECT  UPPER(F.TABLESPACE_NAME)                           AS "TABLESPACE_NAME",
       ROUND(D.MAX_BYTES,2)                               AS "TBS_TOTAL_SIZE" ,
       ROUND(D.AVAILB_BYTES ,2)                           AS "TABLESPACE_SIZE",
       ROUND(D.MAX_BYTES - D.AVAILB_BYTES +USED_BYTES,2)  AS "TBS_AVABLE_SIZE",
       ROUND((D.AVAILB_BYTES - F.USED_BYTES),2)           AS "TBS_USED_SIZE",
       TO_CHAR(ROUND((D.AVAILB_BYTES - F.USED_BYTES) / D.AVAILB_BYTES * 100,
                    2),
              ‘999.99‘)                                  AS "USED_RATE(%)",
      ROUND(F.USED_BYTES, 6)                             AS "FREE_SIZE(G)"
FROM (SELECT TABLESPACE_NAME,
              ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 6) USED_BYTES,
              ROUND(MAX(BYTES) / (1024 * 1024 * 1024), 6) MAX_BYTES
         FROM SYS.DBA_FREE_SPACE
        GROUP BY TABLESPACE_NAME) F,
      (SELECT DD.TABLESPACE_NAME,
              ROUND(SUM(DD.BYTES) / (1024 * 1024 * 1024), 6)  AVAILB_BYTES,
              ROUND(SUM(DECODE(DD.MAXBYTES, 0, DD.BYTES, DD.MAXBYTES))/(1024*1024*1024),6)   MAX_BYTES
         FROM SYS.DBA_DATA_FILES DD
        GROUP BY DD.TABLESPACE_NAME) D
HERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
 AND D.TABLESPACE_NAME=&UNDO_TABLESPACE_NAME
RDER BY 5 DESC;
select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks
from v$rollstat order by rssize;

既然直接入手,无法定位,那就曲线分析,首先检查、分析了一下redo log,发现在7点这段时间,日志切换了83次之多,横向、纵向对比,明显异常,如下截图所示:

SELECT 
TO_CHAR(FIRST_TIME,‘YYYY-MM-DD‘) DAY,
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘00‘,1,0)),‘99‘) "00",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘01‘,1,0)),‘99‘) "01",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘02‘,1,0)),‘99‘) "02",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘03‘,1,0)),‘99‘) "03",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘04‘,1,0)),‘99‘) "04",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘05‘,1,0)),‘99‘) "05",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘06‘,1,0)),‘99‘) "06",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘07‘,1,0)),‘99‘) "07",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘08‘,1,0)),‘99‘) "0",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘09‘,1,0)),‘99‘) "09",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘10‘,1,0)),‘99‘) "10",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘11‘,1,0)),‘99‘) "11",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘12‘,1,0)),‘99‘) "12",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘13‘,1,0)),‘99‘) "13",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘14‘,1,0)),‘99‘) "14",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘15‘,1,0)),‘99‘) "15",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘16‘,1,0)),‘99‘) "16",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘17‘,1,0)),‘99‘) "17",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘18‘,1,0)),‘99‘) "18",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘19‘,1,0)),‘99‘) "19",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘20‘,1,0)),‘99‘) "20",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘21‘,1,0)),‘99‘) "21",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘22‘,1,0)),‘99‘) "22",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,‘HH24‘),‘23‘,1,0)),‘99‘) "23"
FROM
V$LOG_HISTORY
GROUP BY 
TO_CHAR(FIRST_TIME,‘YYYY-MM-DD‘) 
ORDER BY 1 DESC;

技术分享

 

生成了实例在7:00~8:00时间段的AWR报告,从下面指标我们可以看出,数据库实例在这段时间呢,其实是非常空闲的,因为DB Time为9.74(mins)

技术分享

 

另外,从Time Model Statistics部分来看,主要时间花在background elapsed time,而不是DB Time,我们可以判断时间主要耗费在后台进程,而不是前台进程。另外sql execute elapsed time耗用了DB Time的70.36的时间。

 

技术分享

 

然后我们来看SQL order by Gets部分信息, 第一个SQL是删除WRH$_SQL_PLAN的记录,当然也有删除wrh$_sqltext、WRH$_SEG_STAT_OBJ表记录的SQL,如下所示

DELETE
FROM WRH$_SQL_PLAN tab
WHERE (:beg_snap <= tab.snap_id
AND tab.snap_id  <= :end_snap
AND dbid          = :dbid)
AND NOT EXISTS
  (SELECT 1
  FROM WRM$_BASELINE b
  WHERE (tab.dbid   = b.dbid)
  AND (tab.snap_id >= b.start_snap_id)
  AND (tab.snap_id <= b.end_snap_id)
  )
 
DELETE
FROM wrh$_sqltext tab
WHERE (tab.dbid   = :dbid
AND :beg_snap    <= tab.snap_id
AND tab.snap_id  <= :end_snap
AND tab.ref_count = 0)
AND NOT EXISTS
  (SELECT 1
  FROM WRM$_BASELINE b
  WHERE (b.dbid    = :dbid2
  AND tab.snap_id >= b.start_snap_id
  AND tab.snap_id <= b.end_snap_id)
  );
 
 
DELETE
FROM WRH$_SEG_STAT_OBJ tab
WHERE (:beg_snap <= tab.snap_id
AND tab.snap_id  <= :end_snap
AND dbid          = :dbid)
AND NOT EXISTS
  (SELECT 1
  FROM WRM$_BASELINE b
  WHERE (tab.dbid   = b.dbid)
  AND (tab.snap_id >= b.start_snap_id)
  AND (tab.snap_id <= b.end_snap_id)
  );

技术分享

 

查看SQL ordered by Reads部分信息,发现主要也是删除系统表WRH$_SQL_PLAN记录 (这个表是非常大的)

DELETE
FROM WRH$_SQL_PLAN tab
WHERE (:beg_snap <= tab.snap_id
AND tab.snap_id  <= :end_snap
AND dbid          = :dbid)
AND NOT EXISTS
  (SELECT 1
  FROM WRM$_BASELINE b
  WHERE (tab.dbid   = b.dbid)
  AND (tab.snap_id >= b.start_snap_id)
  AND (tab.snap_id <= b.end_snap_id)
  )

技术分享

 

然后我们查看AWR报告的Tablespace IO Stats部分,IO主要集中在SYSAUX,UNDOTBS1这两个表空间,然后你会发现那个表WRH$_SQL_PLAN就是在SYSAUX下

技术分享

 

所以,上面种种证据显示,让我们几乎可以断定主要是下面这个SQL导致了UNDO表空间使用的暴增。当然分析过程中,还有一些旁听佐证。在此感觉没有必要一一列举了。

DELETE
FROM WRH$_SQL_PLAN tab
WHERE (:beg_snap <= tab.snap_id
AND tab.snap_id  <= :end_snap
AND dbid          = :dbid)
AND NOT EXISTS
  (SELECT 1
  FROM WRM$_BASELINE b
  WHERE (tab.dbid   = b.dbid)
  AND (tab.snap_id >= b.start_snap_id)
  AND (tab.snap_id <= b.end_snap_id)
  )

记一次ORACLE的UNDO表空间爆满分析过程

标签:

热心网友 时间:2022-04-09 08:02

UNDO表空间使用率100%了,Oracle数据库的I、U、D、S操作仍然没有问题。Why?

 

先用SQL查一下:
SELECT   tablespace_name, status, SUM (bytes) / 1024 / 1024 "Bytes(M)"
FROM   dba_undo_extents
GROUP BY   tablespace_name, status;
结果为:

上图看出,Undo表空间的状态(STATUS)有三种取值------- ACTIVE, EXPIRED, UNEXPIRED,  他们的含义是:

ACTIVE:  正在使用的undo表空间区域, 例如: 正在执行的没有commit的dml涉及的数据所占用的区域.   状态为ACTIVE的区域不可以被新数据覆盖

EXPIRED: 过期数据,  这个状态说明该区域的数据可以被新数据覆盖,可以理解为空闲区域

UNEXPIRED: 是介于前两者的中间状态, 如果undo表空间的空闲区域和EXPIRED区域都已经消耗光了,则oracle会将新数据覆盖到这个区域, 但是有可能引起某些sql错误,例如快照过旧

上图中的EXPIRED空间有7个多G,所以表空间没有真的“满”。

Oracle的UNDO表空间使用率100%,是真的满了吗

UNEXPIRED: 是介于前两者的中间状态, 如果undo表空间的空闲区域和EXPIRED区域都已经消耗光了,则oracle会将新数据覆盖到这个区域, 但是有可能引起某些sql错误,例如快照过旧上图中的EXPIRED空间有7个多G,所以表空间没有真的“满”。

非结构化数据如何可视化呈现?

通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准...

如何修改oracle 10g中参数undo

在我们的一个案例中这个值最大达到了345600也就是96小时,使得undo表空间在事务比较频繁的情况下很快达到了100%的使用率,导致监控短信频繁响起。知道了原因,解决方案也就有了:10.2.0.2/10.2.0.3有相应的patch,这个bug在10.2.0.4中已经修复,建议找时间停机打patch 设置隐含参数_smu_debug_mo...

关于undo表空间

1.undo空间满了是回退不是自动提交 2.undo_retention理解有误, 它是结合参数autoextensible使用的, 如果是fixed undo表空间,则不起作用

oracle undo表空间被删除,数据库无法启动,请问如何恢复

首先,undo表空间满是正常的,oracle自然会重用或者扩展它,一般不用管它。然后,现在要解决的话,需要先把undo tablespace设置成手动,启动数据库,创建新的undo tablespace。把新的设置成默认的。假设你的库现在是mounted状态 1 创建PFILE(如果已有就是更新)SQL&gt;create pfile from spfile;2 关闭数据库 ...

oracle如何扩展undo表空间?

1、建立新的表空间undotbs2sql&gt; create undo tablespace undotbs2 datafile 'D:\undo03.dbf' size 100m reuse;表空间已创建。2、切换到新建的undo表空间上来,操作如下sql&gt; alter system set undo_tablespace=undotbs2 scope=both;系统已更改。3、将原来的undo表空间,置为脱机: sql&gt; alter ...

oracle什么决定UNDO表空间的大小

oracle undo表空间 undo表空间用于存放undo数据,当执行DML操作(insert、update、delete)时,oracle会将这些操作的旧数据写入到undo段。undo数据的作用 1.回退事务 当执行DML操作修改数据后,旧数据被存放在undo段中。只要数据为提交、回滚段未写满或者回滚段为超时的情况下,旧数据都能被回滚回来。2.读...

undotbs1表空间满了 会自动释放吗

有个参数是设置保留时间的undo_retention 默认是900秒,过了这个时间就自动释放了

oracle中undo表空间是用来保存什么的?

Oracle强烈建议所有数据库都应当使用撤销段,回滚段只被保留用于向后兼容 。\x0d\x0aundo表空间:\x0d\x0a一个数据库可以存在多个撤销表空间,但是在任意给定时刻都只能使用一个撤销表空间。撤销表空间必须被创建为持久的、本地管理的并且能够自动扩展分配空间的表空间。\x0d\x0a事务与undo段:\...

如何删除oracle undo表空间占用的空间

1. 启动SQLPLUS,并用sys登陆到数据库。su - oracle $&gt;sqlplus / as sysdba 2. 查找数据库的UNDO表空间名,确定当前例程正在使用的UNDO表空间:Show parameter undo_tablespace。3. 确认UNDO表空间;SQL&gt; select name from v$tablespace; NAME --- UNDOTBS1 4. 检查数据库UNDO表空间占...

undo表空间满了 会有什么问题

硬盘够大情况下可以设置自动增长 但是要谨慎不良SQL导致UNDO疯长的情况 等过了你默认设置的时间 UNDO数据会撤销的

oracle表空间使用率是空值 oracle 查看表空间使用率 oracle临时表空间使用率 oracle临时表空间使用率查询 plsql查询表空间使用率 mysql 查询表空间使用率 以下表空间使用率 db2表空间使用率 表空间使用率查询
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在韩国怎样申请到电视台观看综艺节目? 中南财经政法大学和西南财经大学哪个的会计学要好,各自就业怎么样... 思享公益丨法学高校巡回中南财专场:直系学姐带来亚洲最大法学院的超全... 中南财大每年推免的比例大概是多少? 英国学生公寓户型全解析 第一次办港澳通行证,湖南人在广东,如果办的话在广东可不可以办? 湖南人第一次可以在佛山办港澳通行证 求CLANNAD动漫图片要渚跟她女儿的图片像这种的要好看的只要多好看悬赏我... 求CLANNAD动画里所有人的图片 91wan街机三国元宝2000个多少? 梦见老公被蜜蜂蛰了后皮疹 matlab求二元函数极值 5g何时能普及? 5G大概什么时候或者说还有几年会全面普及?我在考虑什么时候换机 有没有除了萌师在上以外的师徒恋漫画最好是女的是师傅男的是徒弟的漫画? 金庸笔下,同为女魔头的梅超风和李莫愁,有哪些共同点和不同点? 《徒弟都是大魔头》这本小说一直没找到他的全文版本,你能帮我找到吗? 小说徒弟都是大魔头中主角夜北的至尊魔骨哪来的? 徒弟都是大魔头这个小说现在还可以看吗?去哪看 徒弟都是大魔头为什么结尾那么草率? 徒弟都是大魔头是耽美吗? 深圳高中军训的活动内容(填社会实践用 oracle undo表空间过大的原因是什么?如何进一步分析undo里的数据,推算出是执行了哪些dml造成的? 怎样完整把CAD复制到一个全新的CAD图框里 cAD绘图怎样将图框复制到图形中。请老师帮忙解答一下。谢谢。 怎样复制cad图纸布局中的图框 怎样把画好的CAD图画框复制到另外一个CAD图里 cad中如何将图框复制到另一个新建里- 问一问 杨子跟林志颖他俩谁有钱·请了解他俩的回答 你如何看待杨子说黄圣依马后炮这件事? 梦见老公被蜜蜂蛰然后蜜蜂钻入体内又出来了? 梦见老公伸出手被蜜蜂蛰了 老年人的手机用年轻人的身份证办理如何查接种信息? - 信息提示 老年机怎么查白已给谁发过信息,或接收谁的信息 老人机怎么看到不完整信息 老年手机怎么查删除的信息 请问各位大师馒头蒸熟后为什么会开裂,怎么解决/谢谢你 大华电子秤连接收银机怎么设置 undo 表空间很大,无法释放,该怎么办 上海大华电子条码秤的使用视频教程(求教) 大华条码秤条码格式设置方法 对于SUSE LINUX怎么查看有那些IP,使用VNC或者TELNET登陆过 suse linux怎么打开ipv6协议 在suse linux 10.环境下,如何测试其他内网IP对本IP开放端口情况、是否开通?是否用telnet+ip地址+端口号 梦见小河沟的小金龙飞快地游走? 梦到龙在井里水冒出来/同时有条小金龙 仅聊天什么意思呢? 夏树文(夏&梦)文集 貂蝉享年多少岁啊?