Oracle 11g undo 管理

Oracle 11g的Undo管理是数据库关键机制,用于保证回滚操作和多用户一致性读。本文介绍了Undo的相关数据字典,如v$undostat、dba_hist_undostat、dba_undo_extents等,并详细阐述了Undo表空间的管理和数据重用策略,强调了Undo空间监控和切换表空间的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值