返回顶部
首页 > 资讯 > 数据库 >undo表空间的作用和管理
  • 568
分享到

undo表空间的作用和管理

2024-04-02 19:04:59 568人浏览 泡泡鱼
摘要

一、UNDO的产生 dml操作会产生undo的数据块。 update时, server process会在 databuffer中找到该记录的记录块,没有就从datafile中找并读入 da

一、UNDO的产生

dml操作会产生undo的数据块。
update时, server process会在 databuffer中找到该记录的记录块,没有就从datafile中找并读入 data buffer。在修改之前,先放到undo段 active状态,并在数据块头记录undo段中该数据块的位置,读写这个块时会占用事务槽,会将该事务号记录在数据块的头部。然后进行 update,并将该块放到 dirty list检查点队列,等待dbwr进行写操作。

二、UNDO的作用

还原段的引入,主要是为了解决三个问题。

1 事务恢复:在进行DML操作时,insert、update、delete操作时,undo段记录事务的反向操作并且redo日志也记录undo段的操作,既redo保护undo段的信息。当实例关闭或意外崩溃后,再次open时实例需要对没有commit的事务进行回滚,完成事务的恢复。
2 事务回滚:用户进行DML操作后没有进行commit,需要修改前的数据。只要该操作在undo段保护的时间内,此时执行rollback操作可以回滚到最近记录点或上一次commit操作后的状态,恢复到数据修改前的状态。
3 读一致性:当进行DML操作时,undo段会记录数据变更前的状态(通过构造原数据的一致性数据块)。如果用户还没有进行commit操作,其他人查询此条数据会看到数据变更前的状态。因为其他用户读到的数据是undo段中原数据块中的数据,保证没有commit的数据读取的一致性。

4 倒叙查询: flashback query、 flashback table
10G后增加了新特性一一闪回。利用undo已经提交的块,闪回数据库和表。已经提交的块 inactive数据是不能提交的,但可以倒回到某个时间点。
sql>select name, flashback_on from v$database;

我们常常会忽略对它的监控,这会导致UNDO表空间可能出现以下问题:
1).空间使用率100%,导致DML操作无法进行。
2).告警日志中出现大量的ORA-01555告警错误。
3).实例恢复失败,数据库无法正常打开。

三、undo参数解析

SQL> show parameter undo;

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
undo_management              string     AUTO
undo_retention                 integer     900
undo_tablespace              string     UNDOTBS1

1 初始化参数undo_management

该初始化参数用于指定UNDO数据的管理方式.如果要使用自动管理模式,为AUTO;如果使用手工管理模式,为MANUAL。

使用自动管理模式时,oracle会使用undo表空间管理undo管理;使用手工管理模式时,oracle会使用回滚段管理undo数据。
如果使用自动管理模式时,如果没有配置初始化参数UNDO_TABLESPACE。Oracle会自动选择第一个可用的UNDO表空间存放UNDO数据,如果没有可用的UNDO表空间,oracle会使用SYSTEM回滚段存放UNDO记录,并在ALTER文件中记载警告

2 undo_retention

该参数是一个时间值。说明当还原段中的事务在提交后继续保留的时间,为flashback等工具进行如闪回数据等操作,该参数默认值为900秒,可以动态修改。
当保留时间超过undo_retention所指定的时间以后,该undo块才能够被其他事务覆盖。当我们使用AUM的时候,并且设置了undo_retention以后,undo块的状态就会存在如下4种情况:

active:活跃的,表示正在使用该数据块的事务还没有提交或回滚。
inactive:不活跃的,表示该数据块上没有活动的事务,该状态的数据块可以被其他事务覆盖。
expired:达到时间上限的,表示该数据块持续inactive的时间已经超过了undo_retention所指定的时间,如果没有freed、
freed:已经释放的,表示该数据块是空的,从来没有使用过。

查看Oracle自动调整undo_retention的值可以通过以下查询获得:

select to_char(begin_time,'mm/dd/yyyy hh34:mi:ss') begin_tiem,TUNED_UNDORETENTION from v$undostat;

undo表空间获取空间的申请顺序
freed=>expired=>自动拓展(必须该参数为yes状态才可以)=>inactive(下面详细解释此种状态的覆盖)=>ORA-30036
而且在使用数据块时尽量使用相对更短的连续extent,如不足时才使用更连续的extent。这样能够减少碎片的产生。并且尽量不去覆盖inactive状态的数据块,如果空间足够会最大限度的保存此种状态的数据块包含的信息。

数据查询出现ORA-1555的原因,和如何避免出现?
ORA-1555错误的出现,共有两种原因。
首先解释一下Oracle在数据变更后,如何保证原始数据能够在变更数据不提交的情况下如何得到保护。
原始数据已经被update、delete等DML操作,但变更数据还未进行commit,此时Oracle通过UNDO段构造与原数据相同的一致性数据块,保证其他用户数据不会出现脏读。但在commit后该事务占用的回滚段事务状态会被标记为不活跃的(inactive),回滚段中此区段可以被覆盖重用。
a、回滚段数据被覆盖
出现原因:如果一个查询需要使用已经变更为inactive并且被覆盖的回滚段一致性读块内的数据,想实现一致性读,那么此时就会出现Oracle著名的ORA-01555错误。原因有SQL语句执行时间太长、UNDO表空间过小、事务量过大,提交过于频繁,导致执行SQL过程中进行一致性读时,修改的原数据(UNDO数据)在UNDO表空间中已经被覆盖,不能构造一致性读块。
避免出现的方法:尽量加大回滚段的容量,尽量将undo_retention参数内的提交后保留时间设置更大一些。如果需要保证原数据在retention保留时间内绝对能够查找,那么在保证回滚段容量足够用的前提下可以将表空间参数中加入 retention guarantee以保证原数据的不被任何情况的覆盖。优化出错的SQL和尽量将大事务分割成小事务,并且不进行频繁的提交。

b、块延时清除(Delayed Block Cleanout)引起ORA-1555
您可能感兴趣的文档:

--结束END--

本文标题: undo表空间的作用和管理

本文链接: https://lsjlt.com/news/47961.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • undo表空间的作用和管理
    一、UNDO的产生 dml操作会产生undo的数据块。 update时, server process会在 databuffer中找到该记录的记录块,没有就从datafile中找并读入 da...
    99+
    2024-04-02
  • Oracle UNDO表空间的管理
    UNDO表空间的管理是Oracle DBA最重要的日常工作之一,UNDO表空间用来暂时存储DML操作的数据,其主要作用有:1、事务回滚2、实例恢复3、读一致性4、闪回下面是对UNDO表空间的一些操...
    99+
    2024-04-02
  • 如何监控和管理Oracle UNDO表空间
    这篇文章主要介绍了如何监控和管理Oracle UNDO表空间,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 对Oracle数据库UNDO表空...
    99+
    2024-04-02
  • Oracle undo表空间的作用是什么
    Oracle数据库的Undo表空间(Undo tablespace)用于存储事务执行过程中产生的撤销数据(Undo data)。它主...
    99+
    2024-04-02
  • 生产环境Oracle undo表空间如何管理
    这篇文章主要介绍了生产环境Oracle undo表空间如何管理的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇生产环境Oracle undo表空间如何管理文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-06-29
  • undo表空间使用率
          undo表空间是Oracle数据库非常重要的表空间,它的使用率也是DBA关注的重点,但是在繁忙的生产系统中,很容易看到undo表空间使用率非常高的情况,甚至达到1...
    99+
    2024-04-02
  • UNDO表空间使用率过高
    维护的一个库,最近发现undo表空间的使用率已经到了95%。让undo表空间的自动扩展,或新建undo表空间进行切换都可以解决这个问题。undo表空间自动扩展,可能会导致undo不释放,undo表空间的增大...
    99+
    2024-04-02
  • Oracle表空间管理和用户管理介绍
    目录Oracle介绍1. Oracle表空间2. Oracle用户权限管理3. 查看用户及权限信息总结Oracle介绍 Oracle(甲骨文)公司 1977年,三人合伙创办(Soft...
    99+
    2024-04-02
  • MySQL 8.0.2 新特性 UNDO表空间管理的灵活性提升
    一篇自己翻译的文章,原文来自MySQL Server官方团队博客: 原文链接:http://mysqlserverteam.com/mysql-8-0-2-more-flexible-undo-tables...
    99+
    2024-04-02
  • Oracle表空间管理和用户管理的示例分析
    这篇文章将为大家详细讲解有关Oracle表空间管理和用户管理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Oracle介绍Oracle(甲骨文)公司1977年,三人合伙创办(Software D...
    99+
    2023-06-22
  • oracle 表空间管理
    oracle增减表空间的四种方法Meathod1:给表空间增加数据文件ALTER TABLESPACE app_data ADD DATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORAD...
    99+
    2024-04-02
  • Oracle表空间管理
    创建表空间命令:CREATE TABLESPACE userdataDATAFILE '/u01/oradata/userdata01.dbf' SIZE 100MAUTOEXTEND ON NEXT 5M...
    99+
    2024-04-02
  • 表空间和数据文件的管理
    本文概要介绍了Oracle数据库表空间存储分配和管理的主要特性及操作。 一、表空间的物理关系和逻辑关系 database:数据库。 users:用户,一个数据库包含多个用户。 schema:...
    99+
    2024-04-02
  • Oracle 19c怎么缩减UNDO表空间和容量
    本篇内容主要讲解“Oracle 19c怎么缩减UNDO表空间和容量”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle 19c怎么缩减UNDO表空间和容量...
    99+
    2024-04-02
  • MySQL InnoDB表空间管理
    作者:禅与计算机程序设计艺术 1.简介 什么是MySQL InnoDB表空间 InnoDB存储引擎是MySQL默认的事务型存储引擎,而在InnoDB中,表数据和索引都存放在一个称之为表空间的数据结构...
    99+
    2023-10-23
    自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
  • 如何检查Undo表空间使用情况
    小编给大家分享一下如何检查Undo表空间使用情况,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ######脚本#######...
    99+
    2024-04-02
  • Oracle表空间和数据文件管理
    表空间和数据文件 1.表空间介绍 1). 表空间与数据文件的关系 在Oracle数据库中,表空间与数据文件之间的关系非常密切,这二者相互依存,也就是说,创建表空间时必须...
    99+
    2024-04-02
  • Oracle表空间设置和管理浅析
    前言 表空间是 Oracle 特有的一种逻辑结构,是管理和组织 Oracle 数据文件一种方式,一个Oracle 数据库能够有一个或多个表空间,而一个表空间则对应一个或多个物理的数据库文件。Oracle 的...
    99+
    2024-04-02
  • Oracle 表空间管理(tablespace managment)
    <span style="font-family:微软雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;ba...
    99+
    2024-04-02
  • Oracle数据库基本操作——表空间管理
    简介:ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成的表空间就只谈相关的数据文件首先明确概念:表空间是ORACLE内部定义的一个概念,是为了统一ORACLE物理和逻辑上的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作