管理撤销

1、  撤销数据的实质

修改后的数据被写到表和索引段的数据块,而原来的数据则被写入到撤销段的数据块中。

撤销数据是倒退DML语句结果所需的信息。

为了满足ACID的要求,撤销通常是自动的。

撤销会实现ACIDA,这种回滚是持久的,并且对所有用户公开。

撤销会实现ACIDC,这种回滚是临时的,并且只对运行这个查询的会话是可视的。

撤销和锁定实现ACIDI,也就是说不可能存在相互矛盾的事务。

撤销也可以用于闪回查询。闪回查询允许用户查询数据库过去的映像。实现闪回查询的回滚是临时的。

2、  撤销表空间

撤销表空间用于保存撤销段,其大小决定了实际能够保存多少撤销数据。

一个数据库中可以存在多个撤销表空间,但是任意给定时刻都只能使用一个撤销表空间。

RAC中,打开该数据库的每一个实例都会使用自己的撤销表空间。

撤销表空间必须被创建为持久的、本地管理的并且能够自动扩展分配空间的表空间。撤销表空间不能被设为只读。

创建表空间:

CREATE SMALLFILE UNDO TABLESPACE "UNDO2" DATAFILE 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\undo02.dbf' SIZE 100M RETENTION NOGUARANTEE;

查询:

system@ORCL> select tablespace_name, contents,retention from dba_tablespaces;

 

TABLESPACE_NAME                CONTENTS  RETENTION

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

SYSTEM                         PERMANENT NOT APPLY

UNDOTBS1                       UNDO      NOGUARANTEE

SYSAUX                         PERMANENT NOT APPLY

TEMP                           TEMPORARY NOT APPLY

USERS                          PERMANENT NOT APPLY

OCP10GDATA                     PERMANENT NOT APPLY

UNDO2                          UNDO      NOGUARANTEE

 

已选择7行。

 

system@ORCL> select tablespace_name, segment_name, status from dba_rollback_segs;

 

TABLESPACE_NAME                SEGMENT_NAME                   STATUS

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

SYSTEM                         SYSTEM                         ONLINE

UNDOTBS1                       _SYSSMU10$                     ONLINE

UNDOTBS1                       _SYSSMU9$                      ONLINE

UNDOTBS1                       _SYSSMU8$                      ONLINE

UNDOTBS1                       _SYSSMU7$                      ONLINE

UNDOTBS1                       _SYSSMU6$                      ONLINE

UNDOTBS1                       _SYSSMU5$                      ONLINE

UNDOTBS1                       _SYSSMU4$                      ONLINE

UNDOTBS1                       _SYSSMU3$                      ONLINE

UNDOTBS1                       _SYSSMU2$                      ONLINE

UNDOTBS1                       _SYSSMU1$                      ONLINE

UNDO2                          _SYSSMU20$                     OFFLINE

UNDO2                          _SYSSMU19$                     OFFLINE

UNDO2                          _SYSSMU18$                     OFFLINE

UNDO2                          _SYSSMU17$                     OFFLINE

UNDO2                          _SYSSMU16$                     OFFLINE

UNDO2                          _SYSSMU15$                     OFFLINE

UNDO2                          _SYSSMU14$                     OFFLINE

UNDO2                          _SYSSMU13$                     OFFLINE

UNDO2                          _SYSSMU12$                     OFFLINE

UNDO2                          _SYSSMU11$                     OFFLINE

 

已选择21行。

 

3、  事务与撤销段

撤销段的特性:

。撤销段只能存在于一个撤销表空间中。

撤销管理的特性:

oracle 会根据需要自动生成新的撤销段,从而能够尽可能地确保多个事物必须共享撤销段。

事务与撤销段关系:任何事务生成的撤销数据都无法被分配到多个撤销段中。

撤销数据分为:

ACTIVE:是回滚当前事务可能需要的撤销数据,在事物结束之前,这些数据不能被重写。

EXPIRED:是事务被提交后oracle 不再需要保存的撤销数据,可以被重写。

Oracle 可以采用循环方式使用撤销段。

V$TRANSACTION视图用于产看为每个事务所指派的撤销段。

查看V$TRANSACTIONv$sessiondba_rollback_segs

system@ORCL> select t.start_time, t.used_ublk, s.username, r.segment_name

         from v$transaction t, v$session s, dba_rollback_segs r

             where t.ses_addr=s.saddr and t.xidusn=r.segment_id;

 

4、  管理撤销

4.1 与撤销相关的错误条件

管理撤销的原则:

1 应当始终存在允许所有事务继续进行的足够撤销表空间。

2 应该始终存在保证查询成功的足够撤销数据。

如果第一条原则保证不了,当某个事务耗尽了撤销空间,会出现“ora-30036oracle错误。

如果第二条原则保证不了,长时间运行的查询会出现“ora-1555oracle错误而失败。

4.2 用于撤销的参数

UNDO_MANAGEMENT:被设为auto,才能使用undoUNDO_MANAGEMENT参数是静态的,如果修改必须在实例重启后才能生效。

UNDO_TABLESPACE: 这个参数指定了一个作为有效撤销表空间的表空间,并且该表空间必须已被创建为一个撤销表空间,同时其内部的所有撤销段都会被自动联机。

UNDO_RETENTION:参数指定了保留过期撤销数据的目标位置。UNDO_RETENTION的最大值总是与撤销表空间的大小一致。撤销保留保证一般用于月末进行填制报表等此类工作上。

在创建undo tablespace 时,通过retention guarantee 子句就能够启动撤销保留保证。

我们可以从sqlplus中更改某个撤销表空间的撤销保留保证,但是无法通过database control 完成相同的功能。

例子:

system@ORCL> create undo tablespace undo_noguarantee datafile

2 'undo_ng01.dbf' size 10m;

表空间已创建。

system@ORCL> create undo tablespace undo_guarantee datafile 'undo_g01.dbf' size 10m;

表空间已创建。

system@ORCL> alter tablespace undo_guarantee retention guarantee;

表空间已更改。

system@ORCL> --then for normal running;

system@ORCL> alter system set undo_tablespace=undo_noguarantee;

系统已更改。

system@ORCL> --and for end-of-month reporting

system@ORCL> alter system set undo_tablespace=undo_guarantee;

系统已更改。

 

4.3 调整和监视撤销表空间

调整撤销表空间算法:首先计算在最高负荷时生成撤销的速度,然后再乘以耗时最长的查询的时间长度。即s=vt

使用V$UNDOSTAT视图获取需要的信息。

4.4 删除和缩小撤销段

    SMON进程会每个24小时查看撤销表空间,并且删除用于满足最高工作负荷要求但已不再需要的撤销段,同时还会缩小过大的撤销段。

例子:

查询v$undostat

system@ORCL> select begin_time, end_time, undoblks, maxquerylen, ssolderrcnt,

  2  nospaceerrcnt from v$undostat;

 

BEGIN_TIME        END_TIME            UNDOBLKS MAXQUERYLEN SSOLDERRCNT NOSPACEER

RCNT

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

----

26-04-12:14:57:44 26-04-12:15:07:29         98           0           0

   0

26-04-12:14:47:44 26-04-12:14:57:44         40           0           0

   0

26-04-12:14:37:44 26-04-12:14:47:44          4           0           0

   0

26-04-12:14:27:44 26-04-12:14:37:44         24           0           0

   0

26-04-12:14:17:44 26-04-12:14:27:44         21           0           0

   0

26-04-12:14:07:44 26-04-12:14:17:44          4           0           0

   0

26-04-12:13:57:44 26-04-12:14:07:44        101           0           0

   0

26-04-12:13:47:44 26-04-12:13:57:44         21           0           0

   0

26-04-12:13:37:44 26-04-12:13:47:44          4           0           0

   0

26-04-12:13:27:44 26-04-12:13:37:44         14        1608           0

   0

26-04-12:13:17:44 26-04-12:13:27:44         24        1305           0

   0

26-04-12:13:07:44 26-04-12:13:17:44         11         696           0

   0

26-04-12:12:57:44 26-04-12:13:07:44     133937          87           0

   0

26-04-12:12:47:44 26-04-12:12:57:44         61           0           0

   0

26-04-12:12:37:44 26-04-12:12:47:44          8           0           0

   0

26-04-12:12:27:44 26-04-12:12:37:44         22           0           0

   0

26-04-12:12:17:44 26-04-12:12:27:44         15           0           0

   0

26-04-12:12:07:44 26-04-12:12:17:44         10           0           0

   0

26-04-12:11:57:44 26-04-12:12:07:44         69           0           0

   0

26-04-12:11:47:44 26-04-12:11:57:44         17           0           0

   0

26-04-12:11:37:44 26-04-12:11:47:44          8           0           0

   0

26-04-12:11:27:44 26-04-12:11:37:44         21           0           0

   0

26-04-12:11:17:44 26-04-12:11:27:44         17           0           0

   0

26-04-12:11:07:44 26-04-12:11:17:44          9           0           0

   0

26-04-12:10:57:44 26-04-12:11:07:44         69           0           0

   0

26-04-12:10:47:44 26-04-12:10:57:44         15           0           0

   0

26-04-12:10:37:44 26-04-12:10:47:44         13           0           0

   0

26-04-12:10:27:44 26-04-12:10:37:44         19           0           0

   0

26-04-12:10:17:44 26-04-12:10:27:44         20           0           0

   0

26-04-12:10:07:44 26-04-12:10:17:44         14           0           0

   0

26-04-12:09:57:44 26-04-12:10:07:44        140           0           0

   0

26-04-12:09:47:44 26-04-12:09:57:44         23           0           0

   0

26-04-12:09:37:44 26-04-12:09:47:44          5           0           0

   0

26-04-12:09:27:44 26-04-12:09:37:44        107           0           0

   0

26-04-12:09:17:44 26-04-12:09:27:44        249           0           0

   0

 

已选择35行。

 

计算所需表空间

select

  (select max(undoblks) * max(maxquerylen) / 600 from v$undostat)

  *

  (select value from v$parameter where name='db_block_size')

  "tablespace_size(bytes)"

  from dual;

 

tablespace_size(bytes)

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

2940527903

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9537053/viewspace-722321/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9537053/viewspace-722321/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值