1.change undo,shink undo
create undo <tablespacename> datafile '<dbfile name>' size <XXXM>/reuse manager locally;
alter system set undo_tablespace=APPS_UNDOTS1 scope=spfile;
alter system set undo_management=auto scope=spfile;
restart database
drop tablespace <old undo tablespace>
2.恢复undo
如果有备份可以用恢复普通文件的办法把它恢复
步骤:shutdown DB-->copy-->startup mount-->recover database-->alter database open;
如果没有备份,如果archive都在,可以alter database create datafile,然后继续。
如果没有备份,Archive也没有,修改pfile/spfile,
undo_management =manual
undo_tablespace='system'
_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
在mount的时候把undo drop掉然后打开数据库重建undo
恢复完成后把undo_management ,undo_tablespace修改回来,去掉_CORRUPTED_ROLLBACK_SEGMENTS
3.看undo的段被那些事务所使用
SELECT b.SID, a.xidusn
FROM v$transaction a, v$session b
WHERE a.addr = b.taddr
XIDUSN:就是事务的回滚段号
XIDSLOT:就是ITL列表中,slot的号
XIDSQN:就是表示这个slot被重复使用的次数
在v$lock视图中,有两列id1和id2
其中id1就是xidusn+xidslot的组合,而id2就是xidsqn的值表示slot实际使用的次数
因此可以算出他们的实际值
xidusn=trunc(id1/65536)
xidslot=mod(id1,65536)
因此transaction id就表示为(xidusn,xidslot,xidsqn)
本文详细介绍了如何操作UNDO表空间,包括创建、改变、收缩及恢复。步骤涵盖设置undo_tablespace、undo_management,以及在没有备份情况下的恢复策略。同时,提供了查看事务使用UNDO段的方法。
7万+

被折叠的 条评论
为什么被折叠?



