RMAN恢复小实验

准备工作:

rman全备份数据库(控制文件和数据文件)

停库,dbca删除orcl实例

新建orcl实例,路径和原来一样

将新实例停库,将数据文件迁移到其他路径。

恢复过程:

SQL> SHUTDOWN IMMEDIATE

$ rman target /

RMAN> startup nomount

或者 startup nomount pfile='xx'

 

先恢复控制文件

RMAN> restore controlfile from 'E:\backup\backupsets\C-1479344315-20180519-00_CNT_0';

RMAN> alter database mount;

还原并恢复数据库

restore database;

recover database;

或者

 run

 {

 restore database;

 switch datafile all;

 recover database;

 };

RMAN>alter database open resetlogs;

 

重建临时表空间

先查看临时表空间情况

SQL> select * from v$tempfile;

 

方法一:在原temp表空间中新建临时文件

发现有源库临时文件路径,进行删除。

alter database tempfile 'E:\app\Administrator\oradata\orcl\temp01.dbf' drop;

在原临时表空间中新建临时文件。

alter tablespace temp add tempfile 'E:\app\Administrator\oradata\orcl\temp01.dbf'  size 30m reuse  autoextend on next 100m maxsize unlimited;

 

方法二:也可以重新建临时表空间,重新指定

创建新临时表空间

create temporary tablespace temp1(新temp表空间名) tempfile '/oradata/u01/app/oradata/jcdb/temp01.dbf' size 20m;

将默认临时表空间更改,在删掉失效的原临时表空间及数据文件

alter database default temporary tablespace temp1;

drop tablespace ***(temp表空间名) including contents and datafiles;

--将临时表空间文件设置为自增

alter database tempfile 'E:\app\Administrator\oradata\orcl\temp01.dbf' autoextend on next 100m maxsize unlimited;

 

报错解决

RMAN> recover database;

 

启动 recover 19-5 -18

使用通道 ORA_DISK_1

正在开始介质的恢复

 

无法找到归档日志

归档日志线程=1 序列=208

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: recover 命令 ( 05/19/2018 11:12:18 ) 失败

RMAN-06054: 介质恢复正在请求未知的线程 1 序列 208 的归档日志以及起始

SCN 15281945

 

解决方法:

RMAN> list archivelog all;   --只到207缺少208

--手动注册日志

RMAN> catalog archivelog 'E:\archivelog\ARCH_1_208_973097750.LOG';

RMAN> list archivelog all;   

RMAN> recover database; --直接执行会报错,使用下面set until语句即可成功

 

RMAN>

run { 

set until sequence 209; 

recover database; 

 } 

run { 

set until scn 15281946;

recover database; 

 } 

RMAN>alter database open resetlogs;

问题解决

 

操作过程截取

$ rman target /

RMAN> startup nomount

或者 startup nomount pfile='xx'

 

先恢复控制文件

RMAN> restore controlfile from 'E:\backup\backupsets\C-1479344315-20180519-00_CNT_0';

 

RMAN> alter database mount;

 

数据库已装载

释放的通道: ORA_DISK_1

 

RMAN>  run

2>  {

3>  restore database;

4>  switch datafile all;

5>  recover database;

6>  };

 

启动 restore 19-5 -18

启动 implicit crosscheck backup 19-5 -18

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=63 设备类型=DISK

已交叉检验的 2 对象

完成 implicit crosscheck backup 19-5 -18

 

启动 implicit crosscheck copy 19-5 -18

使用通道 ORA_DISK_1

完成 implicit crosscheck copy 19-5 -18

 

搜索恢复区中的所有文件

正在编制文件目录...

没有为文件编制目录

 

使用通道 ORA_DISK_1

 

通道 ORA_DISK_1: 正在开始还原数据文件备份集

通道 ORA_DISK_1: 正在指定从备份集还原的数据文件

通道 ORA_DISK_1: 将数据文件 00002 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAU

X01.DBF

通道 ORA_DISK_1: 将数据文件 00003 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOT

BS01.DBF

通道 ORA_DISK_1: 将数据文件 00005 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\EMR01

.DBF

通道 ORA_DISK_1: 正在读取备份片段 E:\BACKUP\BACKUPSETS\20180519_2_1_DAT_0

通道 ORA_DISK_1: 段句柄 = E:\BACKUP\BACKUPSETS\20180519_2_1_DAT_0 标记 = TAG2018

0519T101702

通道 ORA_DISK_1: 已还原备份片段 1

通道 ORA_DISK_1: 还原完成, 用时: 00:01:35

通道 ORA_DISK_1: 正在开始还原数据文件备份集

通道 ORA_DISK_1: 正在指定从备份集还原的数据文件

通道 ORA_DISK_1: 将数据文件 00001 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTE

M01.DBF

通道 ORA_DISK_1: 将数据文件 00004 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS

01.DBF

通道 ORA_DISK_1: 将数据文件 00006 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\EMPI0

1.DBF

通道 ORA_DISK_1: 正在读取备份片段 E:\BACKUP\BACKUPSETS\20180519_1_1_DAT_0

通道 ORA_DISK_1: 段句柄 = E:\BACKUP\BACKUPSETS\20180519_1_1_DAT_0 标记 = TAG2018

0519T101702

通道 ORA_DISK_1: 已还原备份片段 1

通道 ORA_DISK_1: 还原完成, 用时: 00:01:16

完成 restore 19-5 -18

 

 

启动 recover 19-5 -18

使用通道 ORA_DISK_1

 

正在开始介质的恢复

 

无法找到归档日志

归档日志线程=1 序列=208

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: recover 命令 ( 05/19/2018 14:26:39 ) 失败

RMAN-06054: 介质恢复正在请求未知的线程 1 序列 208 的归档日志以及起始 SCN 15281945

 

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-00558: 分析输入命令时出错

RMAN-01009: 语法错误: 找到 ";": 应为: "advise, allocate, alter, backup, @, catal

og, change, configure, connect, convert, copy, create, crosscheck, delete, drop,

 duplicate, exit, flashback, grant, host, import, list, mount, open, print, quit

, recover, register, release, repair, replace, report, reset, restore, resync, r

evoke, run, send, set, show, shutdown, spool, sql, startup, switch, transport, u

nregister, upgrade, validate, {, " 中的一个

RMAN-01007: 在第 0 行第 3 , 文件: standard input

 

RMAN>  run {

2>  set until sequence 209;

3> recover database;

4>  }

 

正在执行命令: SET until clause

 

启动 recover 19-5 -18

使用通道 ORA_DISK_1

 

正在开始介质的恢复

 

无法找到归档日志

归档日志线程=1 序列=208

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: recover 命令 ( 05/19/2018 14:27:15 ) 失败

RMAN-06054: 介质恢复正在请求未知的线程 1 序列 208 的归档日志以及起始 SCN 15281945

 

RMAN> list archivelog all;

 

db_unique_name ORCL 的数据库的归档日志副本列表

=====================================================================

 

关键字     线程序列     S 时间下限

------- ---- ------- - ----------

198     1    205     A 19-5 -18

        名称: E:\ARCHIVELOG\ARCH_1_205_973097750.LOG

 

199     1    206     A 19-5 -18

        名称: E:\ARCHIVELOG\ARCH_1_206_973097750.LOG

 

200     1    207     A 19-5 -18

        名称: E:\ARCHIVELOG\ARCH_1_207_973097750.LOG

 

RMAN> select sequence#, first_change#, next_change#, first_time, next_time, back

up_count   from v$archived_log where sequence#=208 and thread#=1;

 

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-00558: 分析输入命令时出错

RMAN-01009: 语法错误: 找到 "identifier": 应为: "advise, allocate, alter, backup,

 @, catalog, change, configure, connect, convert, copy, create, crosscheck, dele

te, drop, duplicate, exit, flashback, grant, host, import, list, mount, open, pr

int, quit, recover, register, release, repair, replace, report, reset, restore,

resync, revoke, run, send, set, show, shutdown, spool, sql, startup, switch, tra

nsport, unregister, upgrade, validate, {, " 中的一个

RMAN-01008: 错误标识符: select

RMAN-01007: 在第 1 行第 1 , 文件: standard input

 

RMAN> run {

2>  set until sequence 208;

3> recover database;

4>  }

 

正在执行命令: SET until clause

 

启动 recover 19-5 -18

使用通道 ORA_DISK_1

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: recover 命令 ( 05/19/2018 14:30:28 ) 失败

RMAN-06556: 数据文件 1 必须从 SCN 15281896 之前的备份还原

 

RMAN> set until scn 15281897;

 

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03031: 设置命令的这一选项需要在运行块内部使用

 

RMAN> run {

2> set until scn 15281897;

3> recover database;

4>  }

 

正在执行命令: SET until clause

 

启动 recover 19-5 -18

使用通道 ORA_DISK_1

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: recover 命令 ( 05/19/2018 14:31:58 ) 失败

RMAN-06556: 数据文件 1 必须从 SCN 15281897 之前的备份还原

 

RMAN> run {

2> set until scn 15281898;

3> recover database;

4>  }

 

正在执行命令: SET until clause

 

启动 recover 19-5 -18

使用通道 ORA_DISK_1

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: recover 命令 ( 05/19/2018 14:32:16 ) 失败

RMAN-06556: 数据文件 1 必须从 SCN 15281898 之前的备份还原

 

RMAN> run {

2> set until scn 15281946;

3> recover database;

4>  }

 

正在执行命令: SET until clause

 

启动 recover 19-5 -18

使用通道 ORA_DISK_1

 

正在开始介质的恢复

 

无法找到归档日志

归档日志线程=1 序列=208

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: recover 命令 ( 05/19/2018 14:32:37 ) 失败

RMAN-06054: 介质恢复正在请求未知的线程 1 序列 208 的归档日志以及起始 SCN 15281945

 

RMAN> catalog archivelog 'E:\archivelog\ARCH_1_208_973097750.LOG';

 

已编目的归档日志

归档日志文件名=E:\ARCHIVELOG\ARCH_1_208_973097750.LOG RECID=201 STAMP=976545227

 

RMAN> list archivelog all;

 

db_unique_name ORCL 的数据库的归档日志副本列表

=====================================================================

 

关键字     线程序列     S 时间下限

------- ---- ------- - ----------

198     1    205     A 19-5 -18

        名称: E:\ARCHIVELOG\ARCH_1_205_973097750.LOG

 

199     1    206     A 19-5 -18

        名称: E:\ARCHIVELOG\ARCH_1_206_973097750.LOG

 

200     1    207     A 19-5 -18

        名称: E:\ARCHIVELOG\ARCH_1_207_973097750.LOG

 

201     1    208     A 19-5 -18

        名称: E:\ARCHIVELOG\ARCH_1_208_973097750.LOG

 

 

RMAN> recover database;

 

启动 recover 19-5 -18

使用通道 ORA_DISK_1

 

正在开始介质的恢复

 

线程 1 序列 208 的归档日志已作为文件 E:\ARCHIVELOG\ARCH_1_208_973097750.LOG 存在

于磁盘上

归档日志文件名=E:\ARCHIVELOG\ARCH_1_208_973097750.LOG 线程=1 序列=208

无法找到归档日志

归档日志线程=1 序列=209

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: recover 命令 ( 05/19/2018 14:34:33 ) 失败

RMAN-06054: 介质恢复正在请求未知的线程 1 序列 209 的归档日志以及起始

SCN 15282476

 

RMAN> run {

 set until sequence 209;

 recover database;

  }

或者

run { 

set until scn 15282476;

recover database; 

 }  

正在执行命令: SET until clause

 

启动 recover 19-5 -18

使用通道 ORA_DISK_1

 

正在开始介质的恢复

介质恢复完成, 用时: 00:00:00

 

完成 recover 19-5 -18

 

RMAN> alter database open;

 

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: alter db 命令 ( 05/19/2018 14:35:39 ) 失败

ORA-01589: 要打开数据库则必须使用 RESETLOGS NORESETLOGS 选项

 

RMAN> alter database open resetlogs;

 

数据库已打开

 

RMAN>

 

数据恢复情况检查

会丢少部分数据

做了测试,新建backup表,然后全备份,

备份完成后,新建backup2backup3表,并switch logfile切换归档日志。

新建backup4表,不切换日志。

 

恢复过程中最后的归档日志有可能需要手动注册catalog archivelog

恢复完成后,检查数据情况:

backup

backup2

backup3

上述3表全部恢复成功。

backup4没有恢复成功,无此表。

 

backup是由全备份恢复的,backup2backup3是由归档日志恢复,

实验得出由于没有切换日志backup4表没有恢复出来,原理应该是没切换日志该表操作在redo中,只有切换日志才会在归档日志中。由于原redo等已经被移除,故backup4表没有恢复出来。

 

恢复实验结论:

rman可以恢复全备份和archivelog归档中保存的数据,但是在redo中的数据会丢失,

即最后操作保存的数据会丢失。

虽然会丢数据,但只是很少一部分。

请使用浏览器的分享功能分享到微信等