一、当我们对数据库进行DML操作的时候,Oracle能通过undo为我们提供保存修改前数据的镜像。作用:
1、提供读一致性
例如用户A修改表TB1,在他进行操作前Oracle将TB1存放于undo中,在用户A修改的同时用户B若访问TB1,则访问
的是undo中的TB1,其他访问TB1的用户也是如此,因此在用户A修改TB1的时候,undo保证了其他用户对TB1的
读一致性。
2、为事务提供回滚
通过保留在undo中的镜像来恢复用户未提交的数据。当用户未提交数据,而此时数据库发生异常关闭,undo中保留的
镜像会自动将数据回滚。
3、提供闪回操作
保留在undo中的镜像在事务结束后并未马上删除,而是保留了一段时间,在这段时间内用户即便已经提交了事务,
仍可以通过 flashback 技术查询。
二、与undo表空间相关的参数:
undo_management:表示undo表空间的管理方式。(9i后的管理方式都是AUTO)
undo_retention:当事务提交后,相关的undo块可以保持多长时间不被覆盖,如图为900s。
undo_tablespace:undo表空间名。
通过下面sql可以查到当前的undo表空间它的retention的属性,该属性决定了undo中不活跃的undo段
是否按照undo_retention设置的值强制保留。GUARANTEE为强制保留,NOGURANTEE不保留。例如,
用户A修改了TB1,提交了大量数据,把undo表空间几乎撑满,按照undo_retention的设置是可以保留900s
覆盖,可如果用户又要修改数据时undo表空间不够用了,那么此时当retention的属性为GUARANTEE时,则
数据在undo中会强制保留900s,属性为NOGURANTEE时,undo会将数据清除为新的事务提供空间。
修改retention的属性:
alter tablespace UNDOTBS1 set retention guarantee;
alter tablespace UNDOTBS1 set retention noguarantee;
三、管理undo表空间
创建undo表空间UNDOTBS2,起始大小10Mb,开启自动扩展,一次扩展10Mb,最大2Gb:
create tablespace UNDOTBS2 datafile '/opt/app/oracle/oradata/orcl/undotbs02.dbf'
size 10m autoextend on next 10m maxsize 2g;
通过 dba_data_files 查看创建的undo表空间:
切换当前使用的表空间为UNDOTBS2:
alter system set undo_tablespace=UNDOTBS2 scope=spfile
(重启数据库生效)
删除表空间:
drop tablespace UNDOTBS2 including contens and datafiles;
(并且删除数据文件,正在使用中的undo表空间无法删除)