1. undo表空间概念和作用

  对于DML语句,只要修改了数据块,数据库就会把修改前的数据保存下来,保存在undo segment中,而undo segment保存在undo表空间;
  数据库中可同时存在多个undo表空间,但一个时间节点上,数据库只能使用一个undo表空间
  若将undo_tablespace 参数设置为另一个undo表空间,被称为undo表空间的切换;
在这里插入图片描述

undo表空间主要用于解决:

1.1 读一致性

   当进行DML操作时,undo段会记录数据变更前的状态(通过构造原数据的一致性数据块)。如果用户还没有进行commit操作,其他人查询此条数据会看到数据变更前的状态。因为其他用户读到的数据是undo segment中原数据块中的数据,保证没有commit的数据读取的一致性。

   若undo块中存放的被修改的数据被其他事务覆盖,则无法找到被修改前的数据,就会抛出ORA-1555 snapshot too old 错误

1.2 回滚事务

  用户进行DML操作后没有进行commit,恢复到数据修改前的状态。只要该操作在undo段保护的时间内,此时执行rollback操作 rollback to savepoint 或上一次commit操作后的状态。

1.3 实例恢复

  实例恢复是在SMON进程完成前滚并打开数据库后发生。SMON进程会去查看 undo segment头部(头部即 undo segment的第一个数据块)记录的事务表(每个事务在使用undo块时,首先要在undo块所在的undo segment的头部记录一个条目,该条目里记录了该事务相关的信息,包括是否提交等),将其中既没有提交也没有回滚,而是在实例崩溃时被异常终止的事务全部回滚

2. undo表空间重要参数

在这里插入图片描述

2.1 undo_retention

  以秒为单位,表示当事务提交或回滚后,该事务所在的undo块中的数据需要保留多久;当保留时间超过undo_retention 所指定的时间后,该undo块才能被其他事务覆盖;

2.2 rentention garentee

  数据库DML操作频繁时,会产生很多undo块,需要覆盖已经被使用的undo块,当undo数据文件不能自动扩展并且undo块不够用时
  若为undo表空间设置retention guarantee属性,则直接报错
  若没有设置,则直接覆盖 inactive又没有expired的undo块,而不管undo_retention 参数


3. undo表空间操作

3.1 查看UNDO表空间
select * from dba_tablespaces where CONTENTS='UNDO';
3.2 查看UNDO 参数
show parameter undo;

在这里插入图片描述
undo_management 表示 自动管理
undo_retention表示事务提交或回滚后等待900秒才能被其他事务覆盖
undo_tablespace系统的默认的UNDO表空间

3.3 增加一个回滚表空间
create undo tablespace undot2 datafile 'D:\software\oracle\oradata\orcl\undot2.dbf' size 10m autoextend on;

在这里插入图片描述

3.4 给回滚表空间 undot2 增加一个数据文件
alter tablespace undot2 add datafile 'D:\software\oracle\oradata\orcl\undot3.dbf' size 10M autoextend on;
3.5 查看数据文件以及其所属的表空间
select * from dba_data_files;

在这里插入图片描述

3.6 切换UNDO表空间
alter system set undo_tablespace = undot2 ;

在这里插入图片描述

3.7 启用和取消rentention garentee:

启用:

alter tablespace undot2 retention guarantee;

查看是否启用:

select tablespace_name, retention from dba_tablespaces;

在这里插入图片描述

取消:

alter tablespace undot2 retention noguarantee;

在这里插入图片描述

3.8 v$undostat 视图,记录undo表空间使用情况

每10分钟更新一次
在这里插入图片描述

select * from v$undostat;

在这里插入图片描述

4. RMAN UNDO备份优化

Rman备份UNDO表空间时排除已经提交的会话对应的数据,提高了Rman备份的效率。
备份优化

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐