暂无图片
暂无图片
6
暂无图片
暂无图片
暂无图片

跳过UNDO表空间的RMAN恢复 只恢复SYSTEM表空间 元数据恢复

刘洪 2022-05-05
1193

跳过UNDO表空间的恢复 元数据恢复 恢复元数据

1 配置、调整参数文件

create spfile from pfile='/tmp/test.p';

2 启动到MOUNT状态

export ORACLE_SID=test
sqlplus / as sysdba
startup nomount

3 恢复控制文件

export ORACLE_SID=test
rman target /
restore controlfile from '/u11/rman/20220505/CF_ORCL_4n0solbp_1_1_20220505.cf';
alter database mount;
catalog start with '/u11/rman/20220505/' noprompt;

4 恢复数据文件

run{
allocate channel c3 type DISK;
set until time "to_date('2022-05-05 17:44:59','yyyy-mm-dd hh24:mi:ss')";
set newname for database to '/u11/test/%U.f';
restore database skip tablespace AF,FL,SYSAUX,UNDOTBS3;
}
switch datafile 1 to copy;

5 恢复元数据

run{
allocate channel c3 type DISK;
set until time "to_date('2022-05-05 17:44:59','yyyy-mm-dd hh24:mi:ss')";
recover database skip tablespace AF,FL,SYSAUX,UNDOTBS3;
}

6 rename日志文件和临时文件

select 'alter database rename file '''||MEMBER||''' to ''/u11/test/redo_'||GROUP#||'_1.f'';' sql_str from v$logfile;
select 'alter database rename file '''||NAME||''' to ''/u11/test/tmp_'||FILE#||'.f'';' sql_str from v$tempfile;

# offline未恢复的数据文件
select 'alter database datafile '||FILE#||'  offline;' sql_str from v$datafile where NAME not like '/u11/test%';

7 配置参数 跳过UNDO表空间

alter system set undo_management=MANUAL scope=spfile sid='*';
alter system set undo_tablespace=SYSETM scope=spfile sid='*';
alter system set "_allow_resetlogs_corruption"=true scope=spfile sid='*';

8 修改pfile

-- 可以偿试查找  select distinct SEGMENT_NAME from DBA_UNDO_EXTENTS; 
create pfile='/tmp/p.f' from spfile;
*._corrupted_rollback_segments=(_SYSSMU10_3002447455$,_SYSSMU8_3250581033$,_SYSSMU2_3967383419$,_SYSSMU6_1717840087$,_SYSSMU3_3882972599$,_SYSSMU1_907901847$,_SYSSMU7_2712126513$,_SYSSMU5_3539990935$,_SYSSMU9_27857613$,_SYSSMU4_3246758255$)

9 resetlogs启动数据库

shutdown immediate
startup mount;
alter database open resetlogs;


-- 如果未配置_corrupted_rollback_segments openresetlogs启库失败
-- 配置之后重新OPEN
alter database open;

10 假若不知道需要跳过的UNDO段

如果不知道数据库的回滚段可以通过下面方法获得:
$ strings SYSTEM.BDF |grep "_SYSSMU"
使用strings命令查看system表空间数据文件,并且查找字符串"_SYSSMU"就可以得到当前数据库的回滚段列表,
然后加入到参数_corrupted_rollback_segments中,再通过指定pfile的方式启动数据库:
_offline_rollback_segments参数可以让指定的回滚段处于OFFLINE状态,从而达到和上面一样的效果,两个参数可以配合使用.

strings data_D-ORCL_TS-SYSTEM_FNO-1.f | grep "_SYSSMU" | sort | uniq > /tmp/undo.txt 
cat /tmp/undo.txt  | awk -F '$' -v vf="$" '{print $1vf}' | sort | uniq 

create pfile='/tmp/p.f' from spfile;
!vi /tmp/p.f
*._offline_rollback_segments=true
*._corrupted_rollback_segments=(_SYSSMU10_1197734989$,_SYSSMU10_3002447455$,_SYSSMU10_3470984480$,_SYSSMU11_3931342952$,_SYSSMU11_894599432$,_SYSSMU12_1573055333$,_SYSSMU12_3654801675$,_SYSSMU1_2603659607$,_SYSSMU13_2364056938$,_SYSSMU13_3860906822$,_SYSSMU1_3724004606$,_SYSSMU14_1888238393$,_SYSSMU14_3319140121$,_SYSSMU15_1436577151$,_SYSSMU15_1649739655$,_SYSSMU16_1689093467$,_SYSSMU16_765947887$,_SYSSMU17_1049158485$,_SYSSMU17_1125934385$,_SYSSMU18_1557221903$,_SYSSMU18_959043000$,_SYSSMU1_907901847$,_SYSSMU19_1624470456$,_SYSSMU19_2284825117$,_SYSSMU20_2312497597$,_SYSSMU20_283536128$,_SYSSMU2_2996391332$,_SYSSMU2_3967383419$,_SYSSMU2_73114111$,_SYSSMU3_1723003836$,_SYSSMU3_3882972599$,_SYSSMU3_596277271$,_SYSSMU4_1254879796$,_SYSSMU4_2523322691$,_SYSSMU4_3246758255$,_SYSSMU5_3539990935$,_SYSSMU5_4008018903$,_SYSSMU5_898567397$,_SYSSMU6_1263032392$,_SYSSMU6_1717840087$,_SYSSMU6_4235600416$,_SYSSMU7_2070203016$,_SYSSMU7_2271882308$,_SYSSMU7_2712126513$,_SYSSMU8_3250581033$,_SYSSMU8_517538920$,_SYSSMU8_854328387$,_SYSSMU9_1650507775$,_SYSSMU9_27857613$,_SYSSMU9_508477954$)



shutdown immediate
create spfile from pfile='/tmp/p.f';
startup mount;
alter database open resetlogs;

# 重新配置参数  *._corrupted_rollback_segments
alter database open;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论