一、What isundo

Every Oracle database must have a method of

maintaining information that is used to roll back, or undo, changes to the

database. Such information consists of records of the actions of transactions,

primarily before they are committed. Oracle refers to these records

collectively as undo.

Undo信息主要用途:

lRoll back transactions when a ROLLBACK statement is

issued.

lRecover the database.

lProvide read consistency.

lAnalyze data as of an earlier point in time by using

Oracle Flashback Query.

lRecover from logical corruptions using Oracle

Flashback features.

当发出ROLLBACK指令时,undo信息被用来undo掉未提交的事务对数据库造成的改变。

在数据库恢复期间,undo信息被用来undo掉所有未从redo log提交到数据文件的事务。

当用户访问一些数据,而这些数据正被其他用户修改时,undo通过维护数据的前镜像(before image)来提供读一致。

二、指定Undo的管理方式(undo

space management)

Oracle提供两种方式来存储undo信息:

lManual undo management mode:以前(9i以前),Oracle使用回滚段(rollback segments)存储undo信息,这种回滚段管理方式非常复杂。

lAutomatic undo management mode:Oracle从9i以后使用另外一种方法来存储undo信息,即使用undo tablespace。

在数据库中,同一时刻只能使用一种方式。当需要在两种方式中切换时,必须重启系统。

注意:Oracle始终使用一个SYSTEM回滚段来执行系统事务。只有一个SYSTEM回滚段,它在创建数据库时自动被创建,而且总是在实例启动时被online。不需要对SYSTEM回滚段进行任何操作。

Oracle使用初始化参数UNDO_MANAGEMENT来指定使用哪种方式管理Undo。当参数设置为MANUAL时,使用回滚段方式;当设置为AUTO时,使用undo表空间方式。Oracle推荐为AUTO。

Oracle 9i:如果UNDO_MANAGEMENT初始化参数没有指定值,则实例使用MANUAL模式。即使指定了UNDO_TABLESPACE初始化参数,也会忽略UNDO_MANAGEMENT参数。

Oracle 10g:

UNDO_MANAGEMENT:If AUTO,use automatic undo management. The default

is MANUAL.

Oracle 11g:

UNDO_MANAGEMENT:If AUTO or null, enable automatic undo management.

If MANAUAL,sets manual undo managemtne mode. The default is AUTO.

1、AUTO管理模式

当UNDO_MANAGEMENT=AUTO时,数据库启动时,实例将使用AUTO管理方式。

必须要有可用的undo tablespace来存储undo信息。这个表空间可以在数据库创建时产生,也可以在数据库创建后再创建。

实例启动时,oracle自动选择第一个可用的undo表空间,如果没有可用的undo表空间,实例就会使用SYSTEM回滚段。这种情况是不被推荐的,系统会在alert.log文件中记录一条警告信息。

使用初始化参数UNDO_TABLESPACE指定系统使用哪一个undo表空间来存放undo信息。如果指定了undo_tablespace的值,但是系统中不存在这样的表空间,那么系统启动将会失败。此时,如果系统中存在undo表空间,为undo_tablespace指定正确的undo表空间名字,或者将undo_tablespace注释,系统会采用存在的undo表空间。否则使用手动方式。

2、MANUAL管理模式

当UNDO_MANAGEMENT=MANUAL时,数据库启动时,实例将使用MANUAL管理方式。

如果UNDO_MANAGEMENT初始化参数没有指定值,则实例使用MANUAL模式。即使指定了UNDO_TABLESPACE初始化参数,也会忽略UNDO_TABLESPACE参数。

当实例启动时,系统根据以下几个参数来确定online的回滚段的数量:

lROLLBACK_SEGMENTS:为实例指定一个或多个回滚段。

lTRANSACTIONS:指定系统中最大的并发事务数。当UNDO_MANAGMENT=MANUAL时,指定系统中online回滚段的数量。系统最大并发事务数受限制于undo tablespace的大小(当UNDO_MANAGEMENT=AUTO时)和online rollback

segments的数量(当UNDO_MANAGEMENT=MANUAL时)。

lTRANSACTIONS_PER_ROLLBACK_SEGMENT:指定每一个回滚段支持的并发事务数。回滚段最小数量=TRANSACTIONS/ TRANSACTIONS_PER_ROLLBACK_SEGMENT:指明系统支持的最大的online回滚段的数目。

三、管理undo tablespace

1、Undo

Retention Period(undo保留期)和Retention

Guarantee

当事务提交后,undo数据就不再被rollback或tranaction

recovery所需要。但是,出于读一致的目的,长查询可能会需要这些老的undo信息。此外,oracle的几种flashback也依赖于这些older undo

information。因此就希望undo信息保留时间尽可能长。

在自动undo管理方式下,有undo retention

period(undo保留期),它指定old undo

information在被覆盖之前要保留的最小时间(Oracle attempts to do this)。注意:只是指定undo数据的过期时间。Old(committed)

undo information that is older than the current undo retention period is said

to be expired. Old undo information with an age that is less than the

current undo retention period is said to be unexpired.

Oracle数据库根据undo表空间大小和系统的活动程度自动调整undo保留期。你可以指定一个最小的保留期(单位:秒),通过UNDO_RETENTION初始化参数(默认900秒,即15分钟)。注意,undo_retention只是指定undo数据的过期时间。并不是undo数据一定会在undo表空间中保存该时间值。当新事务可用空间变少时,数据库开始覆盖expired undo。如果所有的expired undo都已经被覆盖,而undo表空间依然没有空间时,数据库就开始覆盖unexpired undo。如果被覆盖的undo信息被一个长查询的读一致请求,则该查询会收到snapshot too old的错误信息。

UNDO_RETENTION参数对undo保留期的具体影响如下:

l当undo表空间大小为固定值时,UNDO_RETENTION参数被忽略。

l当undo表空间为AUTOEXTEND时,如果undo表空间不够用,oracle不覆盖unexpired undo信息,而是自动扩展undo表空间。如果自动扩展的undo表空间设置了MAXSIZE,这个最大值达到时,oracle就开始覆盖unexpired undo信息。

Retention

Guarantee:

为了确保长查询或flashback操作的成功,可以指定retention

guarantee,它可以确保指定的最小保留期。oracle将从不覆盖unexpired undo数据,即使事务由于undo表空间不够用而失败。

在CREATE DATABASE或CREATE UNDO

TABLESPACE时,可以指定RETENTION

GURANTEE子句,来启用retention

guarantee,也可以在ALTER TABLESPACE使用此子句。关闭语句为RETENTION

NOGUARANTEE。

可以通过DBA_TABLESPACES视图查看undo表空间是否启用了retention

guarantee:

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

TS1                            NOT APPLY

已选择6行。

2、创建undo tablespace

有两种方式创建undo tablespace:

l创建数据库时创建undo tablespace;

l在已存在的数据库中创建。

创建数据库时创建undo tablespace:

使用DBCA创建数据库时自动创建了undo tablespace。手动创建数据库时,在CREATE DATABASE语句中指定undo tablespace子句来创建,但是这个子句不是必须的。如果在创建数据库时,系统指定为auto模式,但是没有指明undo tablespace的名字,那么系统会创建一个默认的undo表空间,名称叫sys_undotbs。这个表空间根据Oracle定义的缺省值创建,初始大小为10M,可以自动扩展。不过Oracle推荐最好还是使用一个指定的大小。

CREATE DATABASE rdbd1

CONTROLFILE REUSE

...

UNDO TABLESPACE undotbs_01 DATAFILE ‘/u01/oracle/rdbd1/undo0101.dbf’;

注意:如果此时系统创建undo失败,那么整个创建数据库的命令会失败。需要删除已经创建的数据文件,纠正错误,重新创建数据库。

使用create undo

tablespace创建:

CREATE UNDO TABLESPACE undotbs_02

DATAFILE ‘/u01/oracle/rdbd1/undo0201.dbf’ SIZE 2M

REUSE

AUTOEXTEND ON;

3、Undo tablespace相关操作

(1)、增加数据文件

ALTER TABLESPACE undotbs_01

ADD DATAFILE ‘/u01/oracle/rbdb1/undo0102.dbf’

AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED;

(2)、重命名数据文件

ALTER TABLESPACE undotbs_01

RENAME DATAFILE ‘/u01/oracle/rbdb1/undo0102.dbf’ TO ‘/u01/oracle/rbdb1/undo0101.dbf’;

(3)、使数据文件online或offline

ALTER TABLESPACE undotbs_01 online|offline;

(4)、开始或结束一个联机备份

ALTER TABLESPACE undotbs_01 BEGIN|END BACKUP;

(5)、删除undo

tablespace

DROP TABLESPACE undotbs_01;

Drop undo表空间的时候必须是在未使用的情况下才能进行。如果undo表空间正在使用(例如事务失败,但是还没有恢复成功),那么drop表空间命令将失败。

DROP TABLESPACE for undo

tablespaces behaves like DROP TABLESPACE...INCLUDING CONTENTS. All contents of

the undo tablespace are removed.

(6)、切换undo

tablespace

ALTER SYSTEM SET UNDO_TABLESPACE=undotbs_02;

一下情况会导致表空间切换失败:

l表空间不存在;

l表空间不是undo表空间;

l表空间正在被其他实例使用(in an Oracle RAC

environment only)。

注意:切换操作不等待旧undo表空间的事务提交。如果旧undo表空间有事务未提交,那么旧的undo表空间进入pending

offline状态,在这种模式下所有的事务能够继续进行,但是undo表空间不能被其他实例使用,也不能被删除,直到所有的事务提交后,undo表空间才进入offline模式。

(7)、设置undo_retention

ALTER SYSTEM SET UNDO_RETENTION=2400;

(8)、undo表空间大小的设计计算公式

UndoSpace = UR*UPS*db_block_size + overhead

UR: is

UNDO_RETENTION in seconds.

UPS: is undo

blocks for each second.

overhead:(冗余量)is the small

overhead for medata(transaction tables,bitmaps,and so forth).

相关统计信息可以从下述动态性能视图v$undostat中查询。

(9)、和undo相关的视图

lv$undostat:包含undo space的统计信息。

lv$rollstat:undo表空间的undo segments的统计信息。

lv$transaction:包含undo segment信息。

ldba_undo_extents:undo表空间的每一个extent的大小、状态信息。

ldba_hist_undostat:包含v$undostat的统计快照信息。

v$undostat视图对于监视当前实例事务在undo空间的状况非常有用。视图中的每一行代表实例每隔十分钟的一个统计信息。该视图一共可包含576行,跨越4天一个周期。

四、管理Rollback

Segments

1、回滚段相关操作

(1)、创建回滚段

创建回滚段必须要有CREATE ROLLBACK

SEGMENT系统权限。

CREATE ROLLBACK SEGMENT rbs_01

TABLESPACE rbsspace

STORAGE(

INITIAL 100K

NEXT 100K

OPTIMAL 4M

MINEXTENTS 20

MAXEXTENTS 100 );

(2)、修改回滚段

修改回滚段必须要有ALTER ROLLBACK

SEGMENT系统权限。

使回滚段online或offline:

ALTER ROLLBACK SEGMENT RB01 ONLINE;

修改存储参数:

ALTER ROLLBACK SEGMENT RB01 STORAGE(MAXEXTENTS 200

OPTIMAL 2048K);

收缩回滚段:

ALTER ROLLBACK SEGMENT RB01 SHRINK;

注意:有OPTIMAL参数时,缩小到OPTIMAL值;没有OPTIMAL参数时,缩小到MINEXTENTS所对应的值。

ALTER ROLLBACK SEGMENT RB01 SHRINK TO 2048K;

ALTER ROLLBACK SEGMENT RB01 STORAGE(MAXEXTENTS 120);

(3)、删除回滚段

删除回滚段必须要有DROP ROLLBACK

SEGMENT系统权限。

原则上,INITIAL总应该等于NEXT,除了使用SET TRANSACTION

USE ROLLBACK SEGMENT XXX的回滚段。由于INITIAL不能直接修改,只能先drop然后创建。

DROP ROLLBACK SEGMENT RB01;

CREATE ROLLBACK SEGMENT RB01 TABLESPACE RBS1

STORAGE(INITIAL 100K NEXT 100K MINEXTENTS 20

MAXEXTENTS 121 OPTIMAL 2000K);

在事务中使用特定的回滚段:

SET TRANSACTION USE ROLLBACK SEGMENT RB_LARGE1;

通过这个命令,可以:

更具事务量的大小,决定使用哪一个回滚段;

将大的查询的事务放入单独的回滚段;

当存在大的查询使用事务时,可以将它放入大的回滚段。

2、和回滚段相关的视图

DBA_ROLLBACK_SEGS:描述回滚段的信息,包含回滚段的名字和表空间。

DBA_SEGMENTS:描述回滚段的附加信息。

V$ROLLNAME:列出在线回滚段的名称。

V$ROLLSTAT:包含回滚段的统计信息。

V$TRANSACTION:包含撤销的统计信息。

oracle segment undo_Oracle undo管理详解相关推荐

  1. oracle segment undo_Oracle Undo工作原理

    一致性读. 同时也衍生出了一些新的 功能, 比如 Flashback query . 传统的 undo 是通过 undo segment 来管理的, 我们看下面的示例: 事务开始,必须首先在 data ...

  2. oracle启用amm,【内存管理】Oracle AMM自动内存管理详解

    一. Oracle 的三种内存管理方式 oracle 内存管理有三种方式,每一个 instance 只能够选择一种.这三种管理方式分别是 AMM 自动内存管理( Automatic Memory Ma ...

  3. win7 64位操作系统中Oracle 11g + plsql安装教程详解(图解)

    这篇文章主要介绍了win7 64位操作系统中Oracle 11g + plsql安装教程详解(图解),详细的介绍了Oracle 11g 安装的步骤,有兴趣的可以了解一下. 先去网上把下面列表里的文件下 ...

  4. 删除oracle数据库的三种方法,oracle数据库的删除方法详解

    oracle数据库的删除方法详解 1.图形界面删除 练习之前记得创建快照 执行命令之前要保证数据库属于open状态 SQL> alter database open; [oracle@local ...

  5. oracle clusterware 11g,oracle clusterware 10g/11g 过程详解

    oracle clusterware 10g/11g 进程详解  oracle clusterware 10g/11g 进程详解 The Oracle 10g Clusterware proces ...

  6. Oracle Golden Gate体系架构详解(原创) - CzmMiao的博客生活 - ITeye技术网站

    Oracle Golden Gate体系架构详解(原创) - CzmMiao的博客生活 - ITeye技术网站

  7. linux oracle 用户创建,LINUX下Oracle数据库用户创建方法详解

    本文实例分析了LINUX下Oracle数据库用户创建方法.分享给大家供大家参考,具体如下: 1)登录linux,以oracle用户登录(如果是root用户登录的,登录后用 su - oracle命令切 ...

  8. Linux操作系统的进程管理详解

    Linux操作系统的进程管理详解 pkill & pgrep pkill & pgrep 是两个很方便的命令.省去了要先ps auwx | grep xxxx然后再根据pid kill ...

  9. 基于Kubernetes构建Docker集群管理详解

    from: 基于Kubernetes构建Docker集群管理详解 Kubernetes是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.动 ...

最新文章

  1. centos7搭建需密码登入的简易ftp服务器
  2. war 发布后页面不更新_一文看懂tomcat8如何配置web页面管理
  3. bios免电池补丁_补丁和权限 处理器漏洞多大这样看
  4. c语言比较大小 谁大选谁,C语言比较优先级
  5. 三道题就能考察你对Vue掌握了多少!
  6. 进销存管理系统, 刚学C++
  7. Appium遇到异常处理
  8. 《生产实习》实习报告——JAVA大数据工程师
  9. 【基础篇】————28、横向渗透
  10. 每个国家对应的语言Locale和国家代码对照表(国际化支持)
  11. word文档如何画线条流程图_Word中流程图如何画 手把手教你制作!
  12. Redis集群:主从节点添加和删除
  13. 基于 Next.js实现在线Excel
  14. 阻塞队列(三):DelayQueue
  15. IOS开发之 ---- 苹果系统代码汉字转拼音
  16. 阿里云轻量应用服务器环境搭建-Docker安装tomcat
  17. m认知无线电信号检测算法matlab仿真,能量检测,循环平稳检测以及自相关检测
  18. Excel 文本日期转可计算的日期,再进行计算
  19. 有道翻译机,能让环球之旅一路畅通吗?
  20. Consult IDE log for more details (Help | Show Log),read failed, socket might closed or timeout,

热门文章

  1. 基于HTML5和JS实现的切水果游戏
  2. 【Linux 的开胃小菜】常用命令与花哨命令行汇总大全
  3. cs服务器维护时间,CS服务器建设简明手册
  4. 解决UHD620,630等集显运行Solidworks卡顿 (点击特征导致描边卡死)
  5. linux查看蓝牙pin码,查看pin
  6. eclipse 导出linux rcp,导出一个RCP程序(Exporting an RCP Application)
  7. eclipse rcp
  8. iSpy结合yolo复杂环境下DLL调用路径攻略
  9. OurPHP傲派(企业 商城 小程序)建站系统 v2.1.0 bulid20200628
  10. BOSHIDA 模块电源的详细分类