一、undo表空间的作用:
Oracle 使用undo来保存数据库事务操作前的旧数据;当一个事务开始时,oracle会把数据保存在undo表空间中;如果事务失败或者事务回滚,oracle将用回滚段中的历史数据,还原表数据;
二、监控undo表空间:
在日常数据库运行中,可能出现以下错误:
1、由于undo表空间所在的磁盘空间不够,造成数据库异常:
如:undo表空间所在磁盘大小为10G,创建表空间的语句为:CREATE UNDO TABLESPACE undotbs_02
DATAFILE '/u01/oracle/rbdb1/undo0201.dbf' SIZE 1024M REUSE AUTOEXTEND ON;表空间是自动增长,当用户删除超过10G的数据时,数据库将报:ORA-01650: unable to extend rollback segment 不能扩展回滚段。所以删除大表时不能简单的用delete from tablename语句;要根据实际情况做相应改变。
2、ORA-01555 snapshot too old 保存在undo表空间中的数据不存在报错:
出现这种错的原因有:
(1)、查询时间太长,导致在undo段中的数据已经发生变化,报错。
(2)、使用flashback queries闪回查询在undo段中的某个时间点已经不存在的数据造成。
三、表空间参数配置:
1、UNDO_RETENTION配置:
UNDO_RETENTION参数表示,保留在undo表空间中的非事务数据的过期时间;0表示自动处理,表示数据有可能随时被覆盖。最大可设置2的32次方。
2、UNDO Retention guaranteeing设置:
语法为:ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;
设置参数为guarantee时,新事务操作时发现undo表空间不足,数据库会让事务失败;如果设置为noguarantee时,数据库会强制清除undo空间,避免事务失败。
在实际过程中,只要做好数据库undo表空间磁盘容量使用的监控就OK了。