加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Undo管理

发布时间:2020-12-12 16:16:59 所属栏目:百科 来源:网络整理
导读:本篇文章中的内容来自ORACLE 11GR2版本的《Administrator's Guide》第16章,该章主要介绍了管理Undo表空间的相关知识。建议有英文基础的同学直接去看《Administrator's Guide》。 一、Undo记录的作用 1.事务未提交时的回滚; 2.恢复数据库 3.保证数据库的读

本篇文章中的内容来自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中的使用方式:

wKioL1eHYyih8NzzAAEFb7a5sYk270.png-wh_50

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',oid);

DBMS_ADVISOR.SET_TASK_PARAMETER(tname,'TARGET_OBJECTS','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的快照信息

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读