Undo回滚
修改某信息时,把某信息原来的值先放在undo segment中,当修改失败时,用于回滚。
意义:
事务回滚
事物恢复
读一致性(当一用户查询时,查询期间某一用户进行修改操作,在某一个用户commit之前,另一用户查询到的信息为原来的值:即判断SCN(system change number,递增)是否为查询时发配的原值,不是就读取undo segment与scn相等的记录值)
undo segment包含多个transaction
undo block只能一个transaction
redo & undo
undo时也会产生redo信息
commit后先写redo log files
在checkpoint后信息才写磁盘
undo segment类型
SYSTEM(用于存储SYSTEM表空间修改前信息)
Non-SYSTEM(其他表空间):自动管理:要创建undo表空间;手动管理
Deferred:当表空间临时突然offline时,用于恢复
自动管理:
指定初始化参数
undo_management=auto
undo_tablespace=xxxx
/*
undo_suppress_errors(设置true,在自动管理模式下手工修改参数时不输出错误)
undo_retention(undo数据在undo表空间保留的时间,单位秒)
*/
创建undo表空间
在create database可以创建undo tablespace,不指定时自动创建(当undo_management=auto时)
或者
create undo tablespace undo1
datafile 'xxxxx' size 200M;
更改undo表空间
alter tablespace undo1
add datafile 'xxxx' size 300M autoextend on;
....
切换undo tablespace
alter system set undo_tablespace=undo2;
删除undo tablespace
drop tablespace undo2;
v$transaction
select addr,used_ublk from v$transaction(查看transaction所使用的undo block)
v$undostat(每十分钟采集undo表空间需要的undo块)
select begin_time,end_time,undoblks from v$undostat;
undo quota(undo配额,限制大事务使用)
通过设置undo_pool,这个是oracle提供的的一个PL/SQL包会设置
查询视图
dba_rollback_segs
select segment_name,tablespace_name from dba_rollback_segs;
v$rollname(所以在线的回滚段)
select * from v$rollname;
v$rollstat(undo segment状态信息)
select usn,status from v$rollstat;