undo的作用:
1、提供读一致性
例如用户A修改表TB1的一条数据,在他进行操作前Oracle将TB1这一条数据存放于undo中,在用户A修改的同时,用户B若访问TB1,则访问
的是undo中的TB1未修改的数据+undo(构建cr)保存的数据,其他访问TB1的用户也是如此,因此在用户A修改TB1的时候,undo保证了其他用户对TB1的
读一致性。
2、为事务提供回滚
通过保留在undo中的镜像来恢复用户未提交的数据。当用户未提交数据,而此时数据库发生异常关闭,undo中保留的
镜像会自动将数据回滚。
3、提供闪回操作
保留在undo中的镜像在事务结束后并未马上删除,而是保留了一段时间,在这段时间内用户即便已经提交了事务,
仍可以通过 flashback 技术查询。
总结:闪回最大时间为db_flashback_retention_target,闪回数据存在 undo表空间,保留时间为undo_retention,保留时间到了数据不会覆盖,只有当undo表空间不够,数据才会覆盖;
show parameter undo_retention 900 (单位是秒)undo保留时间的保留时间
select * from dba_tablespaces where tablespace_name =‘UNDOTBS1’ and RETENTION =‘GUARANTEE’;
alter tablespace UNDOTBS1 RETENTION GUARANTEE;
当undo表空间RETENTION='GUARANTEE’时才会强制保留15分钟,如果为NOGUARANTEE,undo表空间不够,就会随时覆盖;
闪回时间到了数据不会覆盖,只有当undo表空间不够,数据才会覆盖(原因为先覆盖free的段,再覆盖expired的段)
查看undo用的表空间
show parameter undo
show parameter db_flashback_retention_target 1440 (单位是分钟) 是闪回最大时间(数据库闪回)
闪回恢复区能存放的闪回日志大小由db_recovery_file_dest_size参数控制,
闪回日志的保留时间由db_flashback_retention_target参数控制,
一旦超过flashback retention target时间,闪回区没有有足够空间,flashback log将要被覆盖;
该参数和undo_retention类似,并不是一个精确的保留时间
注:只要 flashback 区(db_recovery_file_dest_size )足够大,系统都可以回退到超过1天的某个历史时间点, 没有对闪回日志文件进行覆盖。
当我们对数据库进行DML操作的时候,Oracle能通过undo为我们提供保存修改前数据的镜像。