Undo管理

本篇文章中的内容来自ORACLE 11GR2版本的《Administrator‘s Guide》第16章,该章主要介绍了管理Undo表空间的相关知识。建议有英文基础的同学直接去看《Administrator‘s Guide》。

一、Undo记录的作用

1.事务未提交时的回滚;

2.恢复数据库

3.保证数据库的读一致性;

4.闪回查询、闪回事务、闪回表

二、自动回滚段管理(Automatic Undo Managent,简称为AUM)

1、在11g中,Oracle使用AUM作为管理Undo信息以及Undo表空间的默认管理方式。执行show parameter undo 可以看到有三个参数:

NAME                       TYPE        VALUE

------------------------------------ ----------- ------------------------------

undo_management               string      AUTO

undo_retention                integer     900

undo_tablespace                string      UNDOTBS1

其中,undo_management的值是AUTO或null时,采用的模式是自动回滚段管理;如果值是MANUAL,就是手动回滚段管理。

注:自动回滚段管理使用undo表空间,而手动回滚段管理使用的是回滚段。使用AUM与回滚段表空间是否自动增长没有必然关系。

undo_retention是保证数据不被覆盖的最短时间;

undo_tablespace是指定使用的Undo表空间;

2、Oracle数据库会自动的根据undo表空间的大小以及数据库中的活动情况,对retention的值动态调整。所以通常V$UNDOSTAT中的TUNED_UNDORETENTION的值与TUNED_UNDORETENTION并不总是相等。

对于Oracle自动调整的Undo Retention需要理解以下两点:

1.当undo表空间设置成autoextend选项,并且未达到undo表空间设置的最大值,此时数据库会尽可能地保留undo信息,Undo Retention的值就会变得比较大。

2.对于固定大小的表空间[或者是表空间设置成autoextend,但是已经达到了最大值],Oracle会根据当前undo表空间的大小以及数据库的负载情况,调整Undo Retention的值。默认是基于undo表空间的85%大小或者告警的阈值(默认是85%,这个阈值可以修改)

注意:

1)在动态调整中,Undo Retention的值会比最长的查询时间还要长;如果没有指定retention guarantee,Undo Retention的值也有可能比指定的undo_retention的值要小,也就是回滚段中expired的部分会被提前覆盖。

2)自动调整不支持LOBS类型的数据。

3、查看Undo Retention的值

通过V$UNDOSTAT视图可以查看近4天中,每隔10分钟统计一次的Undo Retention的值(单位:s):

select to_char(begin_time, ‘mm-dd hh24:mi‘) begin_time,to_char(end_time, ‘mm-dd hh24:mi‘) end_time,tuned_undoretention

from v$undostat

order by end_time

三、设置最小的Undo Retention的值

在参数文件里面修改undo_retention的值或者使用alter system set undo_retention的值

四、计算合适的固定大小的Undo空间

OEM中的Undo Advisor和DBMS_ADVISOR包提供了计算合适的undo表空间大小的能力。当你决定使用这个工具时,要明确:

1.最长的查询时间是多少;2.需求的闪回操作的时间点[这点没用到]。

OEM中的使用方式:

DBMS_ADVISOR的使用方式:

DECLARE

tid    NUMBER;

tname  VARCHAR2(30);

oid    NUMBER;

BEGIN

DBMS_ADVISOR.CREATE_TASK(‘Undo Advisor‘, tid, tname, ‘Undo Advisor Task‘);

DBMS_ADVISOR.CREATE_OBJECT(tname, ‘UNDO_TBS‘, null, null, null, ‘null‘, oid);

DBMS_ADVISOR.SET_TASK_PARAMETER(tname, ‘TARGET_OBJECTS‘, oid);

DBMS_ADVISOR.SET_TASK_PARAMETER(tname, ‘START_SNAPSHOT‘, 1);

DBMS_ADVISOR.SET_TASK_PARAMETER(tname, ‘END_SNAPSHOT‘, 2);

DBMS_ADVISOR.SET_TASK_PARAMETER(tname, ‘INSTANCE‘, 1);

DBMS_ADVISOR.execute_task(tname);

END;

通过这些视图:DBA_ADVISOR_TASKS, DBA_ADVISOR_OBJECTS, DBA_ADVISOR_FINDINGS, DBA_ADVISOR_RECOMMENDATIONS可以看到执行的结果。

DBA_ADVISOR_FINDINGS告诉你运行的信息,但是没有显示合适的表空间大小是多少。

五、管理Undo表空间

5.1 创建undo表空间

1)dbca命令会自动创建undo表空间;

2)create database 时创建undo表空间

3)create undo tablespace 另外创建undo表空间,如:

CREATE UNDO TABLESPACE undotbs_02

DATAFILE ‘/u01/oracle/rbdb1/undo0201.dbf‘ SIZE 2M REUSE AUTOEXTEND ON;

5.2 变更undo表空间

5.2.1 增加数据文件

5.2.2 修改数据文件名称

5.2.3 修改数据文件为online或者offline

5.2.4 备份数据文件

以上4点跟普通数据文件的变更方式一样。

5.2.5 修改retention guanantee

alter tablespace UNDOTBS1 retention guarantee;--确保在undo_retention的时间内,数据不会被覆盖。

5.3 删除undo表空间

DROP TABLESPACE undotbs_01;

只有在实例未使用该undo表空间时才能删除;

5.4 切换undo表空间

alter system set undo_tablespace=undotbs_02;

1)undotbs_02必须要存在

2)原来的表空间会出现 PENDING OFFLINE的中间状态,在该状态,原有的事务会继续执行,当这些事务都执行完毕时,状态会切换成OFFLINE。

5.5 undo表空间限额

不能直接使用“alter user scott quota 10m on undotbs1”,而是要在Resource Manager中设置undo_pool,具体要在27章中“Managing Resources with Oracle Database Resource Manager”中的内容。

不过这个表空间限额很少用到。

5.6 undo表空间数据字典

V$UNDOSTAT:包含用于监视和调整undo空间的统计信息。使用此视图可以帮助估计当前工作负载所需的undo空间的数量。该数据库还使用此信息来帮助调整系统中的undo空间的使用。只在自动管理表空间模式下有用。

V$ROLLSTAT:自动撤销管理模式下,反映在undo表空间的撤销段的行为

V$TRANSACTION:回滚段的信息

DBA_UNDO_EXTENTS:显示undo表空间各个extent的大小及状态

DBA_HIST_UNDOSTAT:包含V$UNDOSTAT的快照信息

时间: 2024-08-01 22:47:19

Undo管理的相关文章

RAC中的redo和undo管理

RAC环境中.每个实例对应相应的redolog集(至少2个)和相应的undo表空间. 实例恢复: 单实例数据库的实例恢复: redo:所有已经提交和未提交的操作做前滚 undo:所有未提交的操作做回滚 RAC环境的实例恢复: 当节点A实例崩溃后,则节点B自动根据redolog前滚在undo回滚(立即进行),无需等待节点A的实例正常恢复.(实例恢复由剩余节点进行,如果实例都崩溃了,则有第一个启动的实例节点进行恢复 ) eg:在alarmlog中可以看到 Post SMON to Start 1st

14、管理undo

14.管理 oracle undo 1.DML与undo undo data: 原始的.修改之前的数据副本 用于支持:回退操作.读一致性查询.闪回查询.闪回事务处理及闪回表.从失败事务中进行恢复. undo:旧数据 redo:改变的数据 SQL> show parameter undo NAME     TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_m

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

监控和管理Oracle UNDO表空间的使用 对Oracle数据库UNDO表空间的监控和管理是我们日常最重要的工作之一,UNDO表空间通常都是Oracle自动化管理(通过undo_management初始化参数确定):UNDO表空间是用于存储DML操作的前镜像数据,它是实例恢复,数据回滚,一致性查询功能的重要组件:我们常常会忽略对它的监控,这会导致UNDO表空间可能出现以下问题: 1).空间使用率100%,导致DML操作无法进行. 2).告警日志中出现大量的ORA-01555告警错误. 3).实

09 redo and undo

本章提要-----------------------------------------------redo, undo 定义redo, undo 如何工作如何访问 redo, undo提交和回滚-----------------------------------------------redo: 用来重做(前滚)undo: 用来回滚(后滚) redo: 重做日志文件, 数据库的事务日志, online redo, archived log两类(都是磁盘文件)    如果数据库所在的机房掉电

UNDO表空间的估算

UNDO表空间和TEMP空间类似,都是循环使用的,其使用原理大致如下: 当我们使用AUM(自动UNDO管理),并设置了undo_retention以后,undo块就存在四种状态. Active:表示正在使用该undo的事务还没有提交或回滚. Inactive:表示该undo上没有活动的事务,该状态的undo可以被其他事务覆盖. Expired:表示该undo持续inactive的时间超过undo_retention所指定的时间. Freed:表示该undo块内容是空的,从来没有被使用过. 当活动

Oracle redo与undo 第二弹

首先看一下undo与redo的字面意思:   undo:撤销,也就是取消之前的操作.   redo:重做,重新执行一遍之前的操作. 什么是REDO REDO记录transaction logs,分为online和archived.以恢复为目的. 比如,机器停电,那么在重起之后需要online redo logs去恢复系统到失败点. 比如,磁盘坏了,需要用archived redo logs和online redo logs去恢复数据. 比如,truncate一个表或其他的操作,想恢复到之前的状态

本地管理表空间(LMT)与自动段空间管理(ASSM)概念

创建表空间时,extent management local 定义本地管理表空间(LMT),segment space management auto 定义自动段空间管理(ASSM). extent management local(本地管理表空间)是在表空间的头部用位图区记录extent(区)的使用情况(是否为free).与之相对的是字典管理表空间,用数据字典记录extent使用信息. segment space management auto(段空间自动管理)是在段的头部使用位图管理块(BM

Current online Redo 和 Undo 损坏的处理方法

转自:http://blog.csdn.net/tianlesoftware/article/details/6261475 Oracle 不同故障的恢复方案 http://blog.csdn.net/tianlesoftware/archive/2010/12/30/6106178.aspx Oracle undo 表空间管理 http://blog.csdn.net/tianlesoftware/archive/2010/07/11/5689558.aspx 上面的2篇Blog 讲到了Ora

了解ORACLE UNDO及其真实使用率

首先了解什么是UNDO,可以说UNDO是ORACLE中一个非常实用的功能 UNDO数据也称为回滚(ROLLBACK)数据,它用于确保数据的一致性.当执行DML操作时,事务操作前的数据被称为UNDO记录.UNDO段用于保存事务所修改数据的旧值,其中存储着被修改数据块的位置以及修改前数据 UNDO数据的作用: 1.回退事务 当执行DML操作修改数据时,UNDO数据被存放到UNDO段,而新数据则被存放到数据段中,如果事务操作存在问题,旧需要回退事务,以取消事务变化.假定用户A执行了语句UPDATE e