热备份之恢复UNDO # 没有备份的恢复,请先保护现场 undo表空间损坏的恢复 模拟场景: dml(do not commit) -> shutdown abort -> mv undo datafile 恢复过程: 1. startup -> mount; alter database datafile '/u01/app/oracle/oradata/huayd/undotbs01.dbf' offline drop; alter system set undo_management=manual scope=spfile; alter system set undo_tablespace=undotbs2 scope=spfile; alter system set "_corrupted_rollback_segments"='(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)' scope=spfile; create pfile='/home/oracle/p.ora' from spfile; vim p.ora 2.alter database open; create undo tablespace undotbs2 datafile 'xxx' size 10m; select segment_name,tablespace_name, owner,status from dba_rollback_segs; # find out the segment_name NEEDS RECOVERY startup force DROP ROLLBACK SEGMENT "_SYSSMU10$"; drop tablespace undotbs1 including contents and datafiles; SQL> select segment_name,tablespace_name, owner,status from dba_rollback_segs; SEGMENT_NAME TABLESPACE_NAME OWNER STATUS ------------------------------ ------------------------------ ------ ---------------- SYSTEM SYSTEM SYS ONLINE _SYSSMU1$ UNDOTBS1 PUBLIC NEEDS RECOVERY _SYSSMU2$ UNDOTBS1 PUBLIC NEEDS RECOVERY _SYSSMU3$ UNDOTBS1 PUBLIC NEEDS RECOVERY _SYSSMU4$ UNDOTBS1 PUBLIC NEEDS RECOVERY _SYSSMU5$ UNDOTBS1 PUBLIC NEEDS RECOVERY _SYSSMU6$ UNDOTBS1 PUBLIC NEEDS RECOVERY _SYSSMU7$ UNDOTBS1 PUBLIC NEEDS RECOVERY _SYSSMU8$ UNDOTBS1 PUBLIC NEEDS RECOVERY _SYSSMU9$ UNDOTBS1 PUBLIC NEEDS RECOVERY _SYSSMU10$ UNDOTBS1 PUBLIC NEEDS RECOVERY _SYSSMU11$ UNDOTBS2 PUBLIC ONLINE _SYSSMU12$ UNDOTBS2 PUBLIC ONLINE _SYSSMU13$ UNDOTBS2 PUBLIC ONLINE _SYSSMU14$ UNDOTBS2 PUBLIC ONLINE _SYSSMU15$ UNDOTBS2 PUBLIC ONLINE _SYSSMU16$ UNDOTBS2 PUBLIC ONLINE _SYSSMU17$ UNDOTBS2 PUBLIC ONLINE _SYSSMU18$ UNDOTBS2 PUBLIC ONLINE _SYSSMU19$ UNDOTBS2 PUBLIC ONLINE _SYSSMU20$ UNDOTBS2 PUBLIC ONLINE (_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$) #alter system set "_offline_rollback_segments"=10 scope=spfile; alter system set "_allow_resetlogs_corruption"=true scope=spfile; alter system set events='10231 trace name context forever, level 10'; -- 11g 在11g之前的版本中,回滚段名称是”_SYSTEMn$”之类,而到了11g回滚段的名称变为了”_SYSTEMn_时间戳$”,因为时间戳我们不知道,所以我们不能通过n的值,来确定回滚段的名称,从而也就不能很明确的使用_offline_rollback_segments和_corrupted_rollback_segments来标明异常回滚段。