首页 > 数据库 > Oracle > 利用resetlogs恢复数据库

简单描述上图所表达的意思:
1、在t0时间点上有个数据库备份;
2、t0、t1、t2是数据库所处的某时间点;
3、t2时间时,数据文件丢失,数据库需要介质恢复;
4、从t0点的备份从restore数据库,并应用日志文件恢复到t2时间点的状态;
5、不完全恢复后,resetlogs数据库,oracle新建立了一个incarnation,日志文件被重置为1,在t3时间时,数据库crash。
现在我们需要利用resetlogs之前的备份来恢复到t3时间点的状态,包括两个过程:resetlogs之前的恢复和resetlogs之后的恢复。
此时数据库属于新的incarnation,即resetlogs之后的incarnation。
恢复到resetlogs之前的状态
获取resetlogs scn值
1、多种方式可以获取该值,从alert_
RESETLOGS after incomplete recovery UNTIL CHANGE 2797801
2、模拟数据库崩溃;
shutdown abort;
将数据库的控制文件进行备份,使用os实用工具;
copy d:oracleoradata mandb*.ctl e: mandb
注:此备份在第二个过程中需要使用。
4、连接至target和catalog数据库,并启动至nomount;
connect target /@rmandb
connect catalog rmans/rmans@scfc
startup nomount;
5、取得resetlogs之前的一次incarnation值,并将设置到此incarnation;
list incarnation of database rmandb;
reset database to incartion 1947;
RMAN> list incarnation of database rmandb;
数据库 Incarnations 列表
DB 关键字 Inc 关键字 DB 名 DB ID CUR 重置 SCN 重置时间
------- ------- -------- ---------------- --- ---------- --------
1 1862 RMANDB 3416456476 NO 2751441 2007-08-16 18:16:08
1 1947 RMANDB 3416456476 NO 2794736 2007-08-17 09:38:14
1 2008 RMANDB 3416456476 YES 2797802 2007-08-17 10:16:23
6、恢复到old incarnation的状态,执行下列命令:
run {
set until scn 2797801;
restore controlfile;
alter database mount;
restore database;
recover database;
shutdown immediate;
}
正在执行命令: SET until clause
启动 restore 于 2007-08-17 10:48:47
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=11 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在恢复控制文件
输出文件名=D:ORACLEORADATARMANDBCONTROL01.CTL
通道 ORA_DISK_1: 已恢复备份段 1
段 handle=D:ORACLEORA92DATABASEC-3416456476-20070817-01 tag=null params=NULL
通道 ORA_DISK_1: 恢复完成
正在复制控制文件
输出文件名=D:ORACLEORADATARMANDBCONTROL01.CTL
输出文件名=D:ORACLEORADATARMANDBCONTROL02.CTL
输出文件名=D:ORACLEORADATARMANDBCONTROL03.CTL
完成 restore 于 2007-08-17 10:48:51
数据库已加载
启动 restore 于 2007-08-17 10:48:56
使用通道 ORA_DISK_1
正在略过数据文件 1; 已恢复到文件 D:ORACLEORADATARMANDBSYSTEM01.DBF
正在略过数据文件 2; 已恢复到文件 D:ORACLEORADATARMANDBUNDOTBS01.DBF
正在略过数据文件 11; 已恢复到文件 E:RMANDBTEST01.DBF
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00003恢复到D:ORACLEORADATARMANDBCWMLITE01.DBF
正将数据文件00004恢复到D:ORACLEORADATARMANDBDRSYS01.DBF
正将数据文件00005恢复到D:ORACLEORADATARMANDBEXAMPLE01.DBF
正将数据文件00006恢复到D:ORACLEORADATARMANDBINDX01.DBF
正将数据文件00007恢复到D:ORACLEORADATARMANDBODM01.DBF
正将数据文件00008恢复到D:ORACLEORADATARMANDBTOOLS01.DBF
正将数据文件00009恢复到D:ORACLEORADATARMANDBUSERS01.DBF
正将数据文件00010恢复到D:ORACLEORADATARMANDBXDB01.DBF
通道 ORA_DISK_1: 已恢复备份段 1
段 handle=D:ORACLEORA92DATABASE26IPJO3Q_1_1 tag=TAG20070817T094425 params=NULL
通道 ORA_DISK_1: 恢复完成
完成 restore 于 2007-08-17 10:49:57
启动 recover 于 2007-08-17 10:49:57
使用通道 ORA_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 1 已作为文件 D:ORACLEORA92RDBMSARC00001.001 存在于磁盘上
存档日志线程 1 序列 2 已作为文件 D:ORACLEORA92RDBMSARC00002.001 存在于磁盘上
存档日志线程 1 序列 3 已作为文件 D:ORACLEORA92RDBMSARC00003.001 存在于磁盘上
存档日志文件名 =D:ORACLEORA92RDBMSARC00001.001 线程 =1 序列 =1
存档日志文件名 =D:ORACLEORA92RDBMSARC00002.001 线程 =1 序列 =2
存档日志文件名 =D:ORACLEORA92RDBMSARC00003.001 线程 =1 序列 =3
完成介质的恢复
完成 recover 于 2007-08-17 10:50:05
数据库已卸载
Oracle 例程已关闭
恢复到Resetlogs之后的状态
1、将上一过程中第三步备份的控制文件restore到数据库原来的位置
copy e:rmandb*.ctl d:oracleoradatarmandb
2、starup nomount
3、将incarnation的值设置到resetlogs之后的值reset database to incartion 2008;
4、alter database mount;
5、recover database;
6、alter database open;
经过上面两个过程,此时数据库已经利用old incarnation中的备份恢复到了new incarnation中t3时间点的状态了。
建议在resetlogs之后立即备份数据库,在mount状态下进行备份(以免在open时,数据的丢失)
Shutdown immediate;
Startup mount;
Backup database;
Alter database open;
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10807464/viewspace-963868/ ,如需转载,请注明出处,否则将追究法律责任。