undo表空间是Oracle特有的概念。undo表空间中会自动分配undo段,这些undo段用来保存事务中的DML语句的undo信息,也就是来保存数据在被修改之前的值。在rollback,实例恢复(回滚),一致性读CR块的构造时会使用到undo信息。由于undo的引入,从而Oracle的select语句实现一致性读时,不需要任何锁。

undo表空间和其它表空间有很多类似的地方:undo数据块也会被读到buffer cache缓存起来,修改时也会产生redo log,数据也会写回到undo表空间的磁盘上。所以崩溃后,undo块的buffer cache也会恢复过来。

我们看一下undo表空间:
SQL> show parameter undo_tablespace;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDOTBS1

SQL> select file_name,bytes/1024/1024 size_M from dba_data_files where tablespace_name='UNDOTBS1';
FILE_NAME                                          SIZE_M
---------------------------------------------- ----------
/u01/app/oracle/oradata/jiagulun/undotbs01.dbf         60

系统中现有的undo段:
SQL> select * from v$rollname;
       USN NAME
---------- ------------------------------
         0 SYSTEM
         1 _SYSSMU1$
         2 _SYSSMU2$
         3 _SYSSMU3$
         4 _SYSSMU4$
         5 _SYSSMU5$
         6 _SYSSMU6$
         7 _SYSSMU7$
         8 _SYSSMU8$
         9 _SYSSMU9$
        10 _SYSSMU10$
        11 _SYSSMU11$

12 rows selected.

注意:其中name=SYSTEM的undo段位于SYSTEM表空间,当涉及到对SYSTEM表空间修改时,使用的是上面name=SYSTEM的表空间。比如DDL语句使用的就是SYSTEM这个undo段。另外当我们的undo表空间UNDOTBS1损坏了时,也会使用SYSTEM这个undo段。随着系统的负载,undo段会根据需要自动增加。
SQL> select tablespace_name from dba_data_files;
TABLESPACE_NAME
------------------------------
USERS
SYSAUX
UNDOTBS1
SYSTEM
EXAMPLE

根据undo段的名字来查看段的信息:
SQL> select segment_name,blocks,extents from dba_segments where segment_name='_SYSSMU1$';
SEGMENT_NAME     BLOCKS    EXTENTS
------------ ---------- ----------
_SYSSMU1$           144          3

可见undo段_SYSSMU1$分配了3个区,144个block.下面我具体查看三个区的信息:
SQL> select segment_name,tablespace_name,extent_id,file_id,block_id,blocks from dba_extents where segment_name='_SYSSMU1$';

SEGMENT_NAME TABLESPACE_NAME                 EXTENT_ID    FILE_ID   BLOCK_ID     BLOCKS
------------ ------------------------------ ---------- ---------- ---------- ----------
_SYSSMU1$    UNDOTBS1                                0          2          9          8
_SYSSMU1$    UNDOTBS1                                1          2        129          8
_SYSSMU1$    UNDOTBS1                                2          2       1033        128

可见_SYSSMU1$段的第一个区占用了从第9好block开始的8个block;已经从129号block开始的8个block;已经从1033号block开始的128个block.

从而我们知道:段与段之间是不连续的,而段内部的block是连续的。

从Oracle9i开始,undo表空间是自动管理,undo中的段、区等都是自动分配自动释放的,我只需要保证undo表空间有足够的大小。
SQL> show parameter undo;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1

undo表空间的作用:
Oracle开始一个事务,当要修改数据时,会先将修改前的数据保存到undo表空间的undo段中。保存这些修改前的数据的原因下面这些场合需要undo数据:1)事务的回滚;2)实例恢复(回滚);3)一致性读时需要构造CR块;

undo段中区的状态:
SQL> select extent_id,bytes,status from dba_undo_extents where segment_name='_SYSSMU1$';
 EXTENT_ID      BYTES STATUS
---------- ---------- ---------
         0      65536 EXPIRED
         1      65536 EXPIRED
         2    1048576 EXPIRED

free: 区没有被使用;
active: 区中的undo信息对应的事务没有提交;
inactive: 对应的事务已经提交;
expired: 事务提交后,还没有超过undo_retention秒;
                      
Oracle尽量回使用free的undo区,不够再去扩充,再不够会使用expired的undo区,Oracle原则上是不覆盖inactive的区,但是当undo空间不够时,也可能会使用inactive状态的区;我们可以使用下面的命令来强制Oracle不能覆盖inactive的区:
alter tablespace undotbs1 retention guarantee (强制保证不覆盖)
alter tablespace undotbs1 retention noguarantee (不保证不被覆盖)

SQL> select tablespace_name,retention from dba_tablespaces;
TABLESPACE_NAME                RETENTION
------------------------------ -----------
SYSTEM                         NOT APPLY
UNDOTBS1                       NOGUARANTEE
SYSAUX                         NOT APPLY
TEMP                           NOT APPLY
USERS                          NOT APPLY
EXAMPLE                        NOT APPLY

6 rows selected.

oracle的undo表空间的更多相关文章

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

    这篇文章是记录一次ORACLE数据库UNDO表空间爆满的分析过程,主要整理.梳理了同事分析的思路.具体过程如下所示: 早上收到一数据库服务器的UNDO表空间的告警邮件,最早一封是7:55发出的(监控作 ...

  2. 如何让Oracle释放undo表空间

    如何让Oracle释放undo表空间   最佳答案   在日常的数据库维护和数据库编程中经常会遇到犹豫对大数据量做DML操作后是得ORACLE的undo表空间扩展到十几个G或者几十个G 但是这些表空间 ...

  3. [Oracle]理解undo表空间

    一.回退段介绍 在Oracle数据库中,当某个事物对数据进行修改时,Oracle首先将数据的原始值保存到一个回退段中.一个事物只能将它的回退信息保存到一个回退段中,而多个并行事物可以使用同一个回退段. ...

  4. Oracle中undo表空间的切换

    查看操作系统: SQL>  !cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 7.4 (Maipo)查看数据库版本: ...

  5. oracle重建undo表空间

    create undo tablespace UNDOTBS2 datafile 'D:\oracle\product\10.2.0\oradata\ttonline\UNDOTBS02.DBF' s ...

  6. 监控和管理Oracle UNDO表空间的使用

    对Oracle数据库UNDO表空间的监控和管理是我们日常最重要的工作之一,UNDO表空间通常都是Oracle自动化管理(通过undo_management初始化参数确定):UNDO表空间是用于存储DM ...

  7. Oracle undo 表空间管理 (摘DAVID)

    Oracle 的Undo有两种方式: 一是使用undo 表空间,二是使用回滚段. 我们通过 undo_management 参数来控制使用哪种方式,如果设为auto,就使用UNDO 表空间,这时必须要 ...

  8. (转载)undo表空间

    对Oracle数据库UNDO表空间的监控和管理是我们日常最重要的工作之一,UNDO表空间通常都是Oracle自动化管理(通过undo_management初始化参数确定):UNDO表空间是用于存储DM ...

  9. UNDO表空间不足解决方法

    确认UNDO表空间名称 select name from v$tablespace; 检查数据库UNDO表空间占用空间情况以及数据文件存放位置: select file_name,bytes/1024 ...

随机推荐

  1. JavaScript高级用法一之事件响应与网页交互

    综述 本篇的主要内容来自慕课网,事件响应与网页交互,主要内容如下 1 什么是事件 2 鼠标单击事件( onclick ) 3 鼠标经过事件(onmouseover) 4 鼠标移开事件(onmouseo ...

  2. IDEA的这八条配置你一定要改!

    一定要改的八条军规.快捷键使用idea默认的,与其他同事保存一致 自动编译开关 忽略大小写开关 智能导包开关 悬浮提示开关 取消单行显示tabs的操作 项目文件编码 滚轴修改字体大小 设置行号显示 在 ...

  3. Spark学习笔记——数据读取和保存

    spark所支持的文件格式 1.文本文件 在 Spark 中读写文本文件很容易. 当我们将一个文本文件读取为 RDD 时,输入的每一行 都会成为 RDD 的 一个元素. 也可以将多个完整的文本文件一次 ...

  4. 将Highcharts图表数据生成Table表格

    有的时候,我们不仅仅需要漂亮的统计图来显示统计结果,还需要在统计图下方一个表格可以更加直观的展现各类数据.既然统计图都显示出来了,那我们可以根据统计图的各元素生成表格了. 首先,先显示统计图. Htm ...

  5. orcal数据库基本操作

    1.连接 SQL*Plus system/manager 2.显示当前连接用户 SQL> show user 3.查看系统拥有哪些用户 SQL> select * from all_use ...

  6. 8 -- 深入使用Spring -- 6...1 Spring支持的事务策略

    8.6.1 Spring支持的事务策略 JTA.JDBC.Hibernate Java EE应用的传统事务有两种策略:全局事务和局部事务.全局事务由应用服务器管理,需要底层服务器的JTA(Java T ...

  7. TSPL学习笔记(2):过程和变量绑定

    变量的引用 语法: variable 返回: variable的值 如果在某个范围内存在对某个标识符的变量绑定,那么当这个标识符以表达式的形式出现的时候被认为是其所绑定变量的值. 在引用一个标识符的时 ...

  8. 【netcore基础】.Net core自动作业之Hangfire

    nuget搜索:Hangfire 安装即可,这里我选择的是 1.7.0-beta1 版本 我是用这个集成到了 mvc api里 这里需要在 Startup 文件里进行如下配置 在配置方法 Config ...

  9. centos7 LANMP 安装

    没有开头语. 操作系统:CentOs7.6 64位. Nginx:系统自带 nginx1.12.2包. Mysql:系统自带 MariaDB 5.6 ,更换为 Mysql5.6 PHP:系统php5. ...

  10. asp.net C#绘制太极图

    成品图: html页面: 注意设置 ContentType="Image/Jpeg" <%@ Page Language="C#" AutoEventWi ...