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