oracle 11g undo 介绍: http://blog.youkuaiyun.com/dataminer_2007/article/details/41213945
undo 是 oracle 数据库中一个非常重要的机制, 在对数据库进行数据修改的时候, 能够为修改的数据构造一种前镜像数据(保存修改之前的旧值), 用来保证回滚对数据库的修改以及对多个用户同时访问的数据提供一致性读. 此外, undo 对于恢复数据库以及 flashback 查询之前时间的数据有着至关重要的作用,
1. undo 相关的数据字典
1.1 v$undostat:
displays a histogram of statistical data to show how well the system is working. The available statistics include undo space consumption, transaction concurrency, and length of queries executed in the instance. You can use this view to estimate the amount of undo space required for the current workload. Oracle uses this view to tune undo usage in the system. The view returns NULL values if the system is in manual undo management mode.
显示最近一段时间内关于 undo 表空间使用情况的统计信息, 可以用这个 view 来优化系统, 每隔 10 分钟自动增加一条数据, 总共只保存四天的数据, 如果要查询超过四天的数据就要使用 dba_hist_undostat, 这个 view 仅对于自动 undo 管理模式有效.
几个重要的字段说明:
UNDOTSN | NUMBER | 最近活动的 undo 表空间的 id |
UNDOBLKS | NUMBER | 当前时间段内消耗的 undo blocks 总数 |
TXNCOUNT | NUMBER | 当前时间段内执行的事务总数 |
MAXQUERYLEN | NUMBER | 当前时间段内执行单个查询花费的最长时间, 单位为秒 |
MAXQUERYID | NUMBER | 当前时间段内执行单个查询花费的最长时间的 sql id |
UNXPSTEALCNT | NUMBER | 其他事务尝试盗用未过期 undo 回滚段的次数 |
UNXPBLKRELCNT | NUMBER | 其他事务已经盗用未过期 undo 回滚段的数量 |
UNXPBLKREUCNT | NUMBER | 未过期的 undo 回滚段重用的数量 |
EXPSTEALCNT | NUMBER | 尝试盗用已经过期回滚段的次数 |
EXPBLKRELCNT | NUMBER | 已经盗用过期回滚段的数量 |
EXPBLKREUCNT | NUMBER | 已经过期回滚端重用的数量 |
SSOLDERRCNT | NUMBER | 返回 ora-01555 错误的次数, 如果 SSOLDERRCNT 大于 0, 说明 undo_retention 设置有问题, 需要增加 undo_retention 的大小 |
NOSPACEERRCNT | NUMBER | 空间不足申请新的 undo 表空间的次数 |
TUNED_UNDORETENTION | NUMBER | 已提交数据的undo 数据过期时间, 单位为秒 , 对于估计 flashback 可用的时间有用 |
SQL> select UNDOTSN, UNDOBLKS, TXNCOUNT, MAXQUERYLEN, MAXQUERYID, UNXPSTEALCNT, UNXPBLKRELCNT, UNXPBLKREUCNT, EXPSTEALCNT, EXPBLKRELCNT, EXPBLKREUCNT, SSOLDERRCNT, NOSPACEERRCNT, TUNED_UNDORETENTION
from v$undostat;
1.2 dba_hist_undostat
显示所有的 v$undostat 的历史记录
1.3 dba_undo_extents:
显示数据库所有 undo 表空间的回滚段情况, 其中 status 的取值为 EXPIRED / UNEXPIRED / ACTIVE
Active: 活动状态, 说明当前这个回滚段被某个事务正在使用, 不会被其他事务使用
Expired: 已经过期, 随时可以被其他事务使用
Unexpired: 没有过期, 为了 undo_retention 的需要保留在 undo 表空间, 当空间不足时有可能被其他事务使用
1.4 v$rollname:
只有两个字段(usn, name), 就是一个回滚段 id 和 name, 通常和 v$rollstat 一起使用
1.5 v$rollstat:
统计回滚段表的使用情况
其中 xacts 表示当前回滚段上存在的活动事务的数量
status 的取值为 ONLINE / PENDING OFFLINE / OFFLINE / FULL
SQL> select a.usn, a.name, b.rssize, b.writes, b.xacts, b.waits, b.extends, b.status
from v$rollname a, v$rollstat b
where a.usn = b.usn;
1.6 dba_rollback_segs:
显示所有回滚段(包括 SYS 和 PUBLIC)的空间分配情况及当前状态
其中 status 的取值为 OFFLINE / ONLINE / NEEDS RECOVERY / PARTLY AVAILABLE / UNDEFINED
SQL> select owner, segment_name, tablespace_name, initial_extent, next_extents, status