[Oracle OCP 052-2-1]UNDO概述

undo文件

[root@db01 ~]# cd /opt/oracle/oradata/orcl
[root@db01 orcl]# ll
total 1644776
-rw-r-----. 1 oracle oinstall   9748480 Jun 26 21:34 con01
-rw-r--r--. 1 oracle oinstall      5787 Jun 26 21:18 con.trace
-rw-r-----. 1 oracle oinstall  10076160 Jul 27 11:41 control01.ctl
-rw-r-----. 1 oracle oinstall 104865792 Jul 27 11:34 example01.dbf
-rw-r-----. 1 oracle oinstall  52429312 Jul 27 11:40 redo01.log
-rw-r-----. 1 oracle oinstall  52429312 Jul 27 11:34 redo02.log
-rw-r-----. 1 oracle oinstall  52429312 Jul 27 11:34 redo03.log
-rw-r-----. 1 oracle oinstall   8389120 Jul 27 11:34 redo04.log
-rw-r-----. 1 oracle oinstall 566239232 Jul 27 11:40 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 723525632 Jul 27 11:40 system01.dbf
-rw-r-----. 1 oracle oinstall  20979712 Jun 26 19:13 temp01.dbf
-rw-r-----. 1 oracle oinstall  47194112 Jul 27 11:40 undotbs01.dbf
-rw-r-----. 1 oracle oinstall  38019072 Jul 27 11:34 users01.dbf

undo的作用
使用undo tablespace存放从datafiles读出的数据块的前镜像,提供以下四种情况所需要的信息
1)回滚事务:rollback
2)读一致性:正在做DML操作的数据块,事物结束前,其他用户读undo里面的数据前镜像
3)实例的恢复: instance recover(undo------>rollback)
4)闪回技术: flashback query,flashback table等

undo的管理模式
1)manaual手工:roll segment(已淘汰)
2)auto自动:undo tablespace
(init parameter : undo_management = auto)

sys@ORCL>show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1

undo_retention : 900
undo表空间管理
1)可以建立多个undo表空间,但一个时刻只有一个处于active
2)出于active状态的undo tablespace不能offline和drop

查看表空间
select tablespace_name,status,contents from dba_tablespaces;

sys@ORCL>select tablespace_name,status,contents from dba_tablespaces;

TABLESPACE_NAME                STATUS    CONTENTS
------------------------------ --------- ---------
SYSTEM                         ONLINE    PERMANENT
SYSAUX                         ONLINE    PERMANENT
UNDOTBS1                       ONLINE    UNDO
TEMP                           ONLINE    TEMPORARY
USERS                          ONLINE    PERMANENT
EXAMPLE                        ONLINE    PERMANENT

6 rows selected.

创建undo表空间
create undo tablespace undotbs2 datafile '/opt/oracle/oradata/orcl/undo

sys@ORCL>create undo tablespace undotbs2 datafile '/opt/oracle/oradata/orcl/undo                                                                                                                                                             tbs02.dbf' size 50m autoextend on;

Tablespace created.

sys@ORCL>select tablespace_name,status,contents from dba_tablespaces;

TABLESPACE_NAME                STATUS    CONTENTS
------------------------------ --------- ---------
SYSTEM                         ONLINE    PERMANENT
SYSAUX                         ONLINE    PERMANENT
UNDOTBS1                       ONLINE    UNDO
TEMP                           ONLINE    TEMPORARY
USERS                          ONLINE    PERMANENT
UNDOTBS2                       ONLINE    UNDO
EXAMPLE                        ONLINE    PERMANENT

7 rows selected.

查看当前正在使用的undo tablespace
show parameter undo

sys@ORCL>show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1
sys@ORCL>

select * from v$rollname;

sys@ORCL>select * from v$rollname;

       USN NAME
---------- ------------------------------
         0 SYSTEM
         1 _SYSSMU1_3780397527$
         2 _SYSSMU2_2232571081$
         3 _SYSSMU3_2097677531$
         4 _SYSSMU4_1152005954$
         5 _SYSSMU5_1527469038$
         6 _SYSSMU6_2443381498$
         7 _SYSSMU7_3286610060$
         8 _SYSSMU8_2012382730$
         9 _SYSSMU9_1424341975$
        10 _SYSSMU10_3550978943$

11 rows selected.

sys@ORCL>

切换undo

sys@ORCL>alter system set undo_tablespace=undotbs2;

System altered.

sys@ORCL>show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS2
sys@ORCL>
sys@ORCL>
sys@ORCL>select * from v$rollname; //相当于当前表空间下的10个段,也就是10张大表

       USN NAME
---------- ------------------------------
         0 SYSTEM
        11 _SYSSMU11_4023443810$
        12 _SYSSMU12_2905439648$
        13 _SYSSMU13_1397975244$
        14 _SYSSMU14_3150185878$
        15 _SYSSMU15_3499720984$
        16 _SYSSMU16_3980642801$
        17 _SYSSMU17_3535887706$
        18 _SYSSMU18_337899998$
        19 _SYSSMU19_3332159894$
        20 _SYSSMU20_2343668525$

11 rows selected.

sys@ORCL>

删除undo tablespace

sys@ORCL>drop tablespace undotbs1 including contents and datafiles;

Tablespace dropped.

sys@ORCL>select * from v$tablespace;

       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         0 SYSTEM                         YES NO  YES
         1 SYSAUX                         YES NO  YES
         4 USERS                          YES NO  YES
         6 EXAMPLE                        YES NO  YES
         3 TEMP                           NO  NO  YES
         5 UNDOTBS2                       YES NO  YES

6 rows selected.

sys@ORCL>

undo数据的4种状态
1)active: 表示transaction还没有commit,不可覆盖,用于rollback
2)unexpired : 已经commit,但是还在undo_retention
内,不可以覆盖(非强制),加GUARANTEE属性后强制undo_retention内不覆盖。

3)expired:已经commit,且时间超过了undo_retention内,随时可以覆盖。
4)free:分配了但未使用过。

undo retention参数和undo autoextend on特性
unndo retention参数规定了unexpired commit数据的保留期,它是保证一致性读,和大多数闪回技术成功的关键,将undo表空间设为
autoextend on,这是DBCA创建数据库时的缺省设置,这一个特性将在undo空间不足时优先扩展新的空间,其次才是覆盖unexpired commit。

考点:如果要减少ORA_01555错误(snapshot too old),考虑延长undo retention或使能undo autoextend on。

关于undo_retention参数
此参数只对已commit的undo状态有效

sys@ORCL>select tablespace_name,status,contents,retention from dba_tablespaces;

TABLESPACE_NAME                STATUS    CONTENTS  RETENTION
------------------------------ --------- --------- -----------
SYSTEM                         ONLINE    PERMANENT NOT APPLY
SYSAUX                         ONLINE    PERMANENT NOT APPLY
TEMP                           ONLINE    TEMPORARY NOT APPLY
USERS                          ONLINE    PERMANENT NOT APPLY
UNDOTBS2                       ONLINE    UNDO      NOGUARANTEE
EXAMPLE                        ONLINE    PERMANENT NOT APPLY

guarantee属性随undo表空间建立,可以修改
alter table space undotbs2 retention guarantee;
保证在retention期间不允许被覆盖

sys@ORCL>alter tablespace undotbs2 retention guarantee;

Tablespace altered.

sys@ORCL>select tablespace_name,status,contents,retention from dba_tablespaces;

TABLESPACE_NAME                STATUS    CONTENTS  RETENTION
------------------------------ --------- --------- -----------
SYSTEM                         ONLINE    PERMANENT NOT APPLY
SYSAUX                         ONLINE    PERMANENT NOT APPLY
TEMP                           ONLINE    TEMPORARY NOT APPLY
USERS                          ONLINE    PERMANENT NOT APPLY
UNDOTBS2                       ONLINE    UNDO      GUARANTEE
EXAMPLE                        ONLINE    PERMANENT NOT APPLY

6 rows selected.

*注: 缺省配置下undo retention是noguarantee

发布了58 篇原创文章 · 获赞 5 · 访问量 5132

猜你喜欢

转载自blog.csdn.net/weixin_42161670/article/details/97496809