首页 > Linux操作系统 > Linux操作系统 > UNDO表空间相关操作
1.change undo,shink undo
create undo
alter system set undo_tablespace=APPS_UNDOTS1
drop 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)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10325341/viewspace-573120/ ,如需转载,请注明出处,否则将追究法律责任。