微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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中的使用方式:

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的快照信息

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐