文章目录
1. 作用
处理事务和还原数据
2. 事务的属性
ACID
- 原⼦性:⼀个事务的所有部分必须都完成,或都不完成。
- ⼀致性:查询的结果必须与数据库在查询开始时的状态⼀致。
- 隔离性:除了做出表更的会话,其他会话都⽆法看到未提交的数据。
- 持久性:事务⼀旦完成,不可丢失。
3. UNDO 数据
Undo数据是:
- 原始的、修改之前的数据副本
- 是针对更改数据的每个事务处理所捕获的
- ⾄少保留到事务结束
- 用于支持 rollback操作
- 读取⼀致性数据
- 闪回查询、闪回事务处理和闪回表
- 从失败的事务中进⾏recover.
4. UNDO vs REDO
5. Undo的参数
SQL> show parameter undo
NAME TYPE VALUE
--------------------------- ------ ----------- -----------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
undo_management
- manaual:⼿⼯管理重做
- uto :⼿⼯管理重做段的创建、分配、调整。这是Oracle9I之前的唯⼀⽅法
udno_retention 指定保留期单位秒,保证在这个期间 commit 的 undo 数据不会被覆盖
undo_tablespace 当前使⽤的undo表空间。
5.1 查看undo表空间
查看当前undo表空间
5.2 切换UNDO
undo 表空间很难缩⼩,可以替换
SQL> alter system set undo_tablespace=undotbs2;
SQL> show parameter undo_tablespace
SQL> select * from v$rollname;
动态参数,修改⽴即生效
5.3 删除UNDO 表空间
- 查看 undo 段中区的状态
SQL >select segment_name,tablespace_name,status from
_dba_undo_extents order by status;
- 删除undo表空间
SQL >drop tablespace undotbs1 including contents and datafiles;
删除未激活 undo 时要慎重操作,之前的 undotbs1 可能仍然在使⽤
即使没有事务⽤之前的 undotbs1,可能有查询语句⽤到 unexpired 状态的undo数据
6. 数据状态和参数
retention guarantee 属性
- 通常情况下,unexpired 数据并不绝对保证在 retention 期内不会覆盖,必要时可考虑设置 在保留期强制不覆盖的 guarantee 属性,同时应该使 undo autoextend on
SQL> select tablespace_name,status,contents,retention from
dbatablespaces;
缺省配置下 undo retention 是 noguarantee (guarantee 属性慎重使⽤)
guarantee 属性可以修改。
SQL > alter tablespace undotbs2 retention guarantee;
- 保证 unexpired 状态 undo 数据 在 retention 期间不被覆盖
SQL> select tablespace_name,status,contents,retention from
dba_tablespaces;
- 取消 undo 表空间 guarantee 属性
SQL> alter tablespace undotbs2 retention noguarantee;