码迷,mamicode.com
首页 > 其他好文 > 详细

Undo管理

时间:2016-07-14 19:35:39      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:oracle   数据库   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的快照信息




本文出自 “三国冷笑话” 博客,请务必保留此出处http://myhwj.blog.51cto.com/9763975/1826476

Undo管理

标签:oracle   数据库   undo   

原文地址:http://myhwj.blog.51cto.com/9763975/1826476

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!