oracle的undo的作用

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:
 undo表空间与redo日志文件在oracle中的作用非常重要,重做日志用于从一个实例故障或介质故障中恢复数据库.在应用程序试图回退(撤消)一个事务处理时,不使用重做日志.在这种情况下,oracle将从回退段恢复旧信息,它还有oracle的另一个强大的特性---多版本读取一致性(multi-version read consistency).

undo中数据的特点:
是数据修改前的备份,主要是保证用户的读一致性,在事务修改数据时产生
至少保存到事务结束

undo数据的作用:
回滚(rollback)操作,实现读一致性与闪回查询,从失败的事务中还原数据
, 非正常停机后的实例恢复

undo回滚段的特点:
回滚段是由实例自动创建用于支持事务运行的专用段,同样是区和块组成,回滚 段会按实际需要自动进行增长或收缩,是一段可以给指定事务循环使用的存储缓冲区

每个事务只会使用一个回滚段,一个回滚段在同一时刻可能会服务于多个事务
当一个事务开始的时候,会指定一个回滚段,在事务进行的过程中,当数据被修改时,原始的数据会被复制到回滚段。

在回滚段中,事务会不断填充盘区,直到事务结束或所有的空间被用完,如果当前的盘区不够用,事务会在段中请求扩展下一个盘区,如果所有已分配的盘区都被用完,事务会覆盖最初的盘区或者在回滚段允许的情况下扩展新的盘区来使用.

回滚段存在于undo表空间中,在数据库中可以存在多个undo表空间,但同一时刻只能使用一个undo表空间。


回滚段中的数据主要分为以下几种

Uncommitted undo information; 未提交的回滚数据,该数据所关联的事务并未提交,用于实现读一致性,所以该数据不能被其它事务的数据所覆盖

Committed undo information;已经提交但未过期的回滚数据,该数据关联的事务已经提交,但是仍受到undo retention参数保持时间的影响

Expired undo information;事务已经提交,而且数据保存时间已经超过undo retention参数指定的时间,属于已经过期的数据

当回滚段满了后,会优先覆盖Expired undo information,当过期数据空间用完后,会再覆盖Committed undo information的区域,这时undo retention参数所规定的保持时间会被破坏,Uncommitted undo information的数据是不允许覆盖的,如果要求提交的数据在undo retention参数规定的时间内不会被覆盖,可以在undo表空间上指定RETENTION GUARANTEE,语法如下:
ALTER TABLESPACE UNDOTBS1 RETENTION GUARANTEE;

undo数据与redo数据的区别:
undo记录数据修改之前的操作,redo记录磁盘数据将要进行的操作.
undo用于数据的回滚操作,和实现一致性读,redo用于前滚数据库操作
undo存储在回滚段里,redo存储在重做日志文件里
undo用于在多用户并发的系统里保证一致性读,redo用于防止数据丢失

与undo有关的相关参数
undo_management = auto 自动的undo表空间管理
undo_tablespace = undotbs1 设置undo表空间的名称,可以存在多个undo表空间,但同时只能使用一个
undo_retention = 1800(秒) 设置快照保存的最少时间,设置后在此时间段内仍有可能会被覆盖
ALTER TABLESPACE UNDO_TS RETENTION GUARANTEE; 强制所有快照必须保存 undo_retention所规定的时间。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
SQL Oracle 关系型数据库
Oracle 短时间内误删数据,如何快速找回?(UNDO)
首先,这个短时间内,通常是值 undo 段没有被覆盖,undo 保留的时间为多长呢? 1、需要看 undo_retention 的设置,默认为 900s,也就是 15 分钟。 2、需要看数据库的业务繁忙程度,如果1天切一个归档那种,3天前删的说不定都能用 UNDO 找回来。
|
Oracle 关系型数据库 数据库
|
SQL Oracle 关系型数据库
|
Oracle 关系型数据库 数据库
|
Oracle 关系型数据库