Oracle 原理:UNDO表空间

UNDO表空间又称为,回滚表空间,撤销表空间。Undo segment保存在UNDO 表空间,一个数据库可以有多个UNDO表空间,但是在同一时刻中,只能使用同一个UNDO表空间。

一、UNDO表空间的作用和机制

对于DML语句,只要修改了数据块,Oracle就会把原来修改前的数据块保留下来,存储在Undo segment (回滚段),当执行rollback操作时,把原先的数据重新覆盖回来。回滚段存放在UNDO表空间中。UNDO表空间的管理分为手动管理和自动管理。在11g中默认是采用自动管理模式。

UNDO的作用:把原来修改前的数据块保留下来。主要用于 一致性读,回滚事务,实例恢复。

一致性读的例子:用户 A 执行一个SQL查询操作select * from salary_tbl .需要1分钟。此时用户B执行了

update salary_tbl set salary=2000 where salary = 1000; 那么用户A查询的数据  salary 是1000 而不是2000,当前时刻查询的数据。如果UNDO表空间大小不足会把UNDO的空间进行覆盖,此时查询原来的数据就查询不到了,此时报ORA-1555错误:snapshoot too old   

数据库coredown后的实例恢复:是在 SMON进程完成前滚并打开数据库以后发生,SMON进程回去查看UNDO SEGMENT第一个数据块中记录的事务表,在数据库宕机时将没有提交也没有回滚的事物全部回滚。

undo_retention :为UNDO块中的属性,决定了undo块中的数据至少保存多少秒。例如一个100秒的查询,undo_retention为50。如果在UNDO空间不足的情况下会优先重置过期的数据。如果没重置则还可以查询,如果重置了数据,那么此时100秒的查询操作就会报ORA-1555错误。

retention garentee : 为UNDO块中的属性,10g开始的新特性。确保 UNDO段中的数据未到 undo_retention 绝不会被覆盖。

所以利用UNDO表空间的优先顺序是: 空undo数据块 >undo_retention 到期的数据块 >未设置retention garentee的数据块 >报错

二、UNDO表空间的相关操作

查询表空间select * from dba_tablespaces. 。 只要字段  CONTENTS的值是UNDO 就是UNDO表空间 ,

查看UNDO表空间管理方式  : >>  show parameter undo_management

创建UNDO表空间:

create undo tablespace temp2 tempfile 
'D:\ORACLE\ORADATA\ORCL\undo2_01.dbf' size 10m autoextend on;

给表空间分配临时文件: alter tablespace <spacesname> add tempfile '<路径/文件名.dbf>' size  [100m] autoextend on ;

查看默认UNDO表空间:    show parameter undo

系统默认UNDO表空间切换 alter system  set undo_tablespace = '<spacesname>';

启用[取消] retention garentee: alter tablespace <spacename> retention [ [garentee]  or [nogarentee] ];

查询 retention garentee 状态: select tablespace_name,a.retention from dba_tablespaces a ;

更改undo_retention :  alter system set undo_retention   =1000;

查询UNDO 表空间使用情况 : select * from v$undostat ;  (UNDOBLKS 使用的数据块   TXNCOUNT 事物数  BEGIN_TIME 和END_TIME UNDO生效时间和结束时间)

三、11g 的UNDO表空间的新特性

 RMAN备份恢复UNDO表空间:是一个关于UNDO表空间的备份优化,在11g之前,都是自动把UNDO表空间的所有进行备份。现实的生产环境中,UNDO表空间的历史数据都是十分庞大的,备份用不上的数据不紧占空间,而且影响执行效率。RMAM备份:已经提交数据就不需要再备份了 。

猜你喜欢

转载自blog.csdn.net/superSmart_Dong/article/details/107348641
今日推荐