ITPub博客

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

利用resetlogs恢复数据库

原创 Oracle 作者:walkerq 时间:2007-08-17 13:54:39 0 删除 编辑

lksdf

简单描述上图所表达的意思:

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_.log文件中查找最近一次的语句

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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论
  • 博文量
    4
  • 访问量
    4192