What is the undo data ?
事务在修改数据块时,oracle db会copy修改前的数据块到undo tablespace,这个数据块称之为undo data。
Why oracle db needs undo data ?
1.回滚未提交的事务
2.确保数据库一致性读
3.支持oracle flashback功能
What is the undo tablespace?
存放undo data的表空间称之为undo 表空间。undo tbs空间可以重复使用。
Undo Retention
oracle DB会强制保存uncommit事务产生的undo data在undo tablespace中不被覆盖,当undo tbs的可用空间不够使用时,被占用的空间可以使用原来占用的空间。
oracle db可能还会用到commit后的undo data为flash back feature, or lang queries提供服务。为了提高oracle db的可用性,可以设置undo retention period,保证undo data产生后的时间小于undo retention period 时间不被删除。
How aboat managing undo data?
Oracle db 默认情况下自动管理undo data 和 undo tablespace,当开启oracle flashback features,需要人为的为undo mesage优化,提高flashback features的可用性。
How to perform undo data and undo tablespace?
1.当undo tablespace设置为autoextending时,设置较小的undo retention
2.修改undo tablespace为固定值
默认下undo tablespace如果为autoextending, oracle db会自动优化undo retention值,使其适应db system中最长的查询所需要的保留时间。这种针对undo_retention的自动优化可能无法满足flashback对undo data的需求,如果将undo tablespace改为固定值,oracle db需要根据实际情况修改undo_retention
Why do oracle db need enough undo space?
1.DML会因为undo tablespace没有足够空间失败回滚
2.Long-query会因为undo tablespace没有足够空间
How to view undo tablespace information?
How to create undo tablespace?
CREATE SMALLFILE UNDO TABLESPACE "UNDOTBS2" DATAFILE ‘/u01/app/oracle/oradata/bjbd/undotbs201.dbf‘ SIZE 1024M AUTOEXTEND ON NEXT 1024K MAXSIZE UNLIMITED RETENTION NOGUARANTEE