准备工作:
先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表,然后全备份,
备份完成后,新建backup2、backup3表,并switch logfile切换归档日志。
新建backup4表,不切换日志。
恢复过程中最后的归档日志有可能需要手动注册catalog archivelog
恢复完成后,检查数据情况:
backup
backup2
backup3
上述3表全部恢复成功。
backup4没有恢复成功,无此表。
backup是由全备份恢复的,backup2和backup3是由归档日志恢复,
实验得出由于没有切换日志backup4表没有恢复出来,原理应该是没切换日志该表操作在redo中,只有切换日志才会在归档日志中。由于原redo等已经被移除,故backup4表没有恢复出来。
恢复实验结论:
rman可以恢复全备份和archivelog归档中保存的数据,但是在redo中的数据会丢失,
即最后操作保存的数据会丢失。
虽然会丢数据,但只是很少一部分。