Welcome 微信登录

首页 / 数据库 / MySQL / undo表空间概述

UNDO的简要概序:
   
1. 一般的表空间中的段是手动建立的,undo表空间和普通的表空间相似,但是undo表空间中undo段,undo段是自动生成的;Oracle自动使用、维护undo段。
2. 一般表空间中的段是我们自己手动使用的,而undo表中的段是oracle自动使用的。show parameter undo_tablespace;//查询当前的undo表空间
NAME                                             TYPE        VALUE                                                                                             
-------------------------------------------------- ----------- ----------------
undo_tablespace                                    string      UNDOTBS1     select * from v$rollname;//当前有多少段
//下面的段是系统提供的回滚段:
   1. 对数据库对象进行操作的时候,也就是使用数据字典的时,SYSTEM的UNDO段才会使用
   2. 如果undo表空间坏了,可能会使用SYSTEM段
0   SYSTEM
//下面的是存在于 UNDOTBS1中,这下面段是在数据库运行一段时间会自动调整的段
1   _SYSSMU1_3780397527$
2   _SYSSMU2_2232571081$
3   _SYSSMU3_2097677531$
4   _SYSSMU4_1152005954$
5   _SYSSMU5_1527469038$
6   _SYSSMU6_2443381498$
7   _SYSSMU7_3286610060$
8   _SYSSMU8_2012382730$
9   _SYSSMU9_1424341975$
10   _SYSSMU10_3550978943$select SEGMENT_NAE,BLOCKS,EXTENTS from dba_segments where SEGMENT_NAME="SYSTEM";//在system的表空间中段的大小SYSTEM   48   6--UNDO表空间占用空间情况以及数据文件存放位置
   select file_name,bytes/1024/1024 from dba_data_files
   where tablespace_name like "%UNDOTBS%";/u01/app/oracle/oradata/jiagulun/undotbs01.dbf   90
select SEGMENT_NAME,TABLESPACE_NAME,EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS from dba_extents where SEGMENT_NAME="SYSTEM";//段所占的区SYSTEM   SYSTEM   0   1   128   8
SYSTEM   SYSTEM   1   1   136   8
SYSTEM   SYSTEM   2   1   528   8
SYSTEM   SYSTEM   3   1   536   8
SYSTEM   SYSTEM   4   1   544   8
SYSTEM   SYSTEM   5   1   552   8select SEGMENT_NAME,TABLESPACE_NAME,EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS from dba_extents where SEGMENT_NAME="_SYSSMU7_3286610060$";_SYSSMU7_3286610060$   UNDOTBS1   0   3   224   8
_SYSSMU7_3286610060$   UNDOTBS1   1   3   232   8
_SYSSMU7_3286610060$   UNDOTBS1   2   3   312   8
_SYSSMU7_3286610060$   UNDOTBS1   3   3   1024   128
_SYSSMU7_3286610060$   UNDOTBS1   4   3   11392   128通过上面可以看到对于系统的undo段中的区是连续的,而且区中的块也是连续的
但是对于非系统的undo段中的区不是连续的,但是区中的块是连续的undo表空间的管理方式:在9i以前表空间自动建立,段是自动建立;但是区是手动分区的,这样就会存在一些问题:
   一些比较大的DML语言跑跑就因为undo段够就会出现问题,空间不足。
                在其后就自动分配了,在某些请款下也会自动回收的。
show parameter undo;
NAME                                             TYPE        VALUE                                                                                             
-------------------------------------------------- ----------- ----------------------------------------------------------------------------------------------------
undo_tablespace                                    string      UNDOTBS1                                                                                           
NAME                                             TYPE        VALUE                                                                                             
-------------------------------------------------- ----------- ----------------------------------------------------------------------------------------------------
undo_management                                    string      AUTO                                                                                               
undo_retention                                   integer   900                                                                                               
undo_tablespace                                    string      UNDOTBS1                                                                                           
undo表空间的作用
   1. oracle会在事务开启的时候使用undo:
          在oracle在修改数据的时候,oracle会把被修改的数据放入undo表
          空间的undo段里面。(当修改语句越多,使用的undo段越多)正
          因为保存了被修改的数据,所以undo可以回滚
   2. 保证一个会话读不到另外一个会话未提交的数据,靠undo表空间保存原数据,所以undo保证读一致性
   3. oracle的实例崩溃恢复:前滚,回滚*Undo段中区的状态
   free:从来没有用过的
   expired:当过了undo_retention时间,oracle会释放。原则expired不会被释放。未测时间
   inactive:表示事务已经提交,但是还没有过undo_retention,原则上是要保留undo_retention时间,但是空间压力比较
             大,可以被覆盖
   active:表示在事务还未提交时,所使用区的状态,不可以被覆盖undo_retention
   alter tablespace undotbs1 retention guarantee//设置inactive区的数据至少保存undo_retention后才被覆盖
   alter tablespace undotbs1 retention noguaranteeselect TABLESPACE_NAME, RETENTION from dba_tablespaces;
SYSTEM   NOT APPLY
SYSAUX   NOT APPLY
UNDOTBS1   GUARANTEE
TEMP   NOT APPLY
USERS   NOT APPLY
EXAMPLE   NOT APPLY当进行DML时,就会使用FREE空间,当FREE空间不够时就扩undo表空间的,当扩不了时,就使用EXPIRED的,当设置表空间为guarantee时,
就使用不了inactive那么事务就必须挂起。当表空间设置为Noguarantee时就使用inactive,假如inactive使用不够就事务挂起--------------------------------------------------------------------------------RMAN备份与恢复之undo表空间丢失 http://www.linuxidc.com/Linux/2014-01/95335.htm关于Oracle 释放过度使用的undo表空间 http://www.linuxidc.com/Linux/2013-09/90315.htmOracle undo的一些理解 http://www.linuxidc.com/Linux/2013-09/89701.htmOracle undo 镜像数据探究 http://www.linuxidc.com/Linux/2013-08/89074.htmOracle 回滚(ROLLBACK)和撤销(undo) http://www.linuxidc.com/Linux/2013-08/88792.htmLinux-6-64下安装Oracle 12C笔记 http://www.linuxidc.com/Linux/2013-07/86805.htm在CentOS 6.4下安装Oracle 11gR2(x64) http://www.linuxidc.com/Linux/2014-02/97374.htmOracle 11gR2 在VMWare虚拟机中安装步骤 http://www.linuxidc.com/Linux/2013-09/89579p2.htmDebian 下 安装 Oracle 11g XE R2 http://www.linuxidc.com/Linux/2014-03/98881.htm--------------------------------------------------------------------------------更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址