UNDO表空间相关知识

回滚表空间的管理

一、回滚段的功能:
1)回滚活动事务
2)恢复被终止的事务
3)提供一致性读
4)恢复逻辑损坏


二、有关UNDO表空间的参数
undo_tablespace=表空间名称
undo_retention=
undo_managment=auto|manal
一般来说在HS的系统中UNDO_MANAGMENT=AUTO UNDO_RETENTION=900
(UR) UNDO_RETENTION in seconds
(UPS) Number of undo data blocks generated per second
(DBS) Overhead varies based on extent and file size (db_block_size)
UndoSpace = [UR * (UPS * DBS)] + (DBS * 24)
其中每秒生成的UNDO量,可以通过如下SQL得出
SELECT (SUM(undoblks))/ SUM ((end_time - begin_time) * 86400)
FROM v$undostat;
或者可以看下AWR报告中的Undo Statistics部分,还有实际的UNDO SIZE设置要比计算的大点

三、 UNDO表空间的切换
1)创建好一个UNDO表空间
create undo tablespace undotbs2 datafile '' size autoextend off;
2) alter system set undo_tablespace=undotbs2;
成功切换后,不要急于DROP原来的表空间,要首先查明原UNDO表空间是否有活动事务
成功切换后,新的事务会在新的UNDO表空间中,如果旧的UNDO表空间里有PENGDING事务,那么会继续执行下去
处于 pending offline的事务不能被DROP,等所有事务提交后,会变成offline状态,此时可以DROP
四 、UNDO guarantee
从10GR2后,可以启用和关闭guarantee特性,缺省是关闭的,也就是说,如果一个事务需要的UNDO 空间,UNDO表空不能提供,那么会使用unexpired 数据。
如果启用,unexpired undo 不会被覆盖,即使会使其他事务失败。
可以通过如下命令启用或关闭
alter tablespace undotbs1 retention guarantee;
五、UNDO管理的一些视图、

1)v$undostat
以下几列比较重要:

2)dba_undo_extents
UNDO段的分配,可以通过以下SQL查询
SELECT DISTINCT STATUS, SUM(BYTES), COUNT(*)
FROM DBA_UNDO_EXTENTS GROUP BY STATUS;
有三种状态:
ACTIVE 有活动事务在使用的
EXPIRED 超出UNDO RETENTION的 UNDO 分区
UNEXPIRED 没有超出UNDO RETENTION的 UNDO 分区
3)dba_rollback_segs UNDO段的状态
SELECT INSTANCE_NUM,TABLESPACE_NAME,SEGMENT_NAME,STATUS FROM DBA_ROLLBACK_SEGS;
4)查看活动事务 v$transaction
SELECT A.SID, A.USERNAME, B.XIDUSN, B.USED_UREC, B.USED_UBLK
FROM V$SESSION A, V$TRANSACTION B
WHERE A.SADDR=B.SES_ADDR;

六、UNDO表空间监控
1)查看UNDO 表空间可用空间

SELECT SUM(BYTES) FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME='&UNDOTBS';

2)当前表空间使用的空间以及状态

SELECT DISTINCT STATUS, SUM(BYTES), COUNT(*)
FROM DBA_UNDO_EXTENTS GROUP BY STATUS;

3)活动事务使用的UNDO大小
SELECT XIDUSN, XIDSLOT, XIDSQN, USED_UBLK FROM V$TRANSACTION WHERE STATUS='ACTIVE' ;

4)关闭UNDO表空间数据文件的自动扩展,对于HS的系统一定要关闭
SELECT FILE_ID, AUTOEXTENSIBLE FROM DBA_DATA_FILES WHERE
TABLESPACE_NAME='UNDOTBS%'

如果是ON就执行以下SQL
alter database datafile '' autoextend off;

七、UNDO一些常见错误
1)ORA 1651 : unable to extend save undo segment by <num> in tablespace <name>
一般来说UNDO 表空间满了,并且你的自动扩展可能是打开的
解决方法:增加UNDO 表空间或者 减小undo_retention
2)ORA 3297 : file contains <num> blocks of data beyond requested RESIZE value

UNDO表空间可以 resize 变大,但是不能resize 变小,只能通过切换表空间来操作
解决方法:新建一个表空间做个切换

3)ORA-01555 快照过旧
解决方法:增加UNDO表空间或者减少UNDO_RETENTION 或者调整大的查询
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值