-
Using RMAN to Perform Recovery -- 用 RMAN 工具来进行恢复
-
-
本章的主要目的:
-
Perform complete recovery when a critical or noncritical data file is lost -- 重要非重要文件丢失进行的恢复
-
注: 重要不重要 -- 对应于是否能打开数据库,如果这个文件丢失库彻底打不开-- critical file,反之offline 一个文件但是库能打开 no critical file
-
? Recover using incrementally updated backups -- 使用增量备份 来进行恢复。
-
注:可以对backupset 也可以对copy 进行增量备份。 backup incremental level 1 datafile 4; --默认 differential not cumulative .默认是backupset 不是copy
-
cumulative incremental level 1 -- 必须指定累计增量备份;
-
backup as copy -- 指定 备份为 image copy 形式。 不过都是对 backupset 的full 进行增量备份。 -- 可以使用image copy + incremental backup 构造最新的image copy。
-
? Switch to image copies for fast recovery -- 直接切换表空间对应到image copy 上,实现快速恢复。
-
? Restore a database onto a new host -- 如果本机服务器硬件挂了,有rman 备份,怎么从一个服务器把数据库转移到另外一台机器上
-
? Recover using a backup control file -- 使用备份的控制文件来:1.有catalog 2. no catalog 必须 nomount 下利用dbms_backup_restore 包进行还原
-
-
一、重要 or 非重要文件丢失进行的恢复
-
-
能否正常打开对比一下两个视图:
-
-
sys@ZTSYS> select file#,checkpoint_change# from v$datafile;
-
-
FILE# CHECKPOINT_CHANGE#
-
---------- ------------------
-
1 1056849
-
2 1056849
-
3 1013032
-
4 1056849
-
5 1056849
-
-
-
sys@ZTSYS> select file#,checkpoint_change# from v$datafile_header;
-
-
FILE# CHECKPOINT_CHANGE#
-
---------- ------------------
-
1 0
-
2 1056849
-
3 1013032
-
4 1056849
-
5 1056849
-
-
(此为 我删除了system01.dbf 文件导致的现象)
-
-
1: system 文件, 3:undo 文件 --之前的文件不影响实验。 此时数据库只能到mount 。
-
进行的操作:
-
restore datafile 1;
-
recover datafile 1;
-
-- 1==system01.dbf
-
-
实验
-
critical 文件 alter database open --error!
-
非critical 文件 例如:users 中的文件 删除掉, alter database datafile 4 offline immediate & alter tablespace users offline 。大不了就是一个文件或者表空间不能用,alter database open -- right .其他表空间可以正常使用
-
注: immediate 加与不加的区别 度娘
-
-
-
二、 使用 copy + incremental backup 的方法
-
实验:
-
看脚本:
-
rman> recover copy of database with tag 'daily_inc'; -- 做到实时更新一个image copy .
-
RMAN> backup incremental level 1 for recover of copy with tag 'daily_inc' database; --
-
可以拆开看: backup incremental level 1 for xxx -- 对那个备份进行 增量备份
-
recover of copy database with tag 'xxx' 对xxx 标签的image copy 的说明的语法 。 从而做到对最新的image copy 进行增量备份,下次有可以运用增量到image copy 上,往复循环。
-
-
rman 输出:
-
第一天:
-
-
RMAN> recover copy of datafile 4 with tag 'd1';
-
-
Starting recover at 01-JUN-14
-
using channel ORA_DISK_1
-
no copy of datafile 4 found to recover
-
Finished recover at 01-JUN-14
-
-
RMAN> backup incremental level 1 for recover of copy with tag 'd1' datafile 4;
-
-
Starting backup at 01-JUN-14
-
using channel ORA_DISK_1
-
no parent backup or copy of datafile 4 found
-
channel ORA_DISK_1: starting datafile copy
-
input datafile file number=00004 name=D:\APP\ADMINISTRATOR\ORADATA\ZTSYS\USERS01
-
.DBF
-
output file name=D:\APP\ADMINISTRATOR\FAST_RECOVERY_AREA\ZTSYS\DATAFILE\O1_MF_US
-
ERS_9RO7MPRR_.DBF tag=D1 RECID=1 STAMP=849094263
-
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
-
Finished backup at 01-JUN-14
-
-
--没有看到 datafile 4 的copy 所以做了一个全备, 生成的文件目录大家留意一下。
-
-
-
第二天:
-
-
-
RMAN> recover copy of datafile 4 with tag 'd1';
-
-
Starting recover at 01-JUN-14
-
using channel ORA_DISK_1
-
no copy of datafile 4 found to recover
-
Finished recover at 01-JUN-14
-
-
-
RMAN> backup incremental level 1 for recover of copy with tag 'd1' datafile 4;
-
-
Starting backup at 01-JUN-14
-
using channel ORA_DISK_1
-
channel ORA_DISK_1: starting incremental level 1 datafile backup set
-
channel ORA_DISK_1: specifying datafile(s) in backup set
-
input datafile file number=00004 name=D:\APP\ADMINISTRATOR\ORADATA\ZTSYS\USERS01
-
.DBF
-
channel ORA_DISK_1: starting piece 1 at 01-JUN-14
-
channel ORA_DISK_1: finished piece 1 at 01-JUN-14
-
piece handle=D:\APP\ADMINISTRATOR\FAST_RECOVERY_AREA\ZTSYS\BACKUPSET\2014_06_01\
-
O1_MF_NNND1_D1_9RO7T80C_.BKP tag=D1 comment=NONE
-
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
-
Finished backup at 01-JUN-14
-
-- 一样没有 增量所以,recover 没有。 之后做了一个增量备份
-
-
第三天及其以后:
-
-
RMAN> recover copy of datafile 4 with tag 'd1';
-
-
Starting recover at 01-JUN-14
-
using channel ORA_DISK_1
-
channel ORA_DISK_1: starting incremental datafile backup set restore
-
channel ORA_DISK_1: specifying datafile copies to recover
-
recovering datafile copy file number=00004 name=D:\APP\ADMINISTRATOR\FAST_RECOVE
-
RY_AREA\ZTSYS\DATAFILE\O1_MF_USERS_9RO7MPRR_.DBF
-
channel ORA_DISK_1: reading from backup piece D:\APP\ADMINISTRATOR\FAST_RECOVERY
-
_AREA\ZTSYS\BACKUPSET\2014_06_01\O1_MF_NNND1_D1_9RO7T80C_.BKP
-
channel ORA_DISK_1: piece handle=D:\APP\ADMINISTRATOR\FAST_RECOVERY_AREA\ZTSYS\B
-
ACKUPSET\2014_06_01\O1_MF_NNND1_D1_9RO7T80C_.BKP tag=D1
-
channel ORA_DISK_1: restored backup piece 1
-
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
-
Finished recover at 01-JUN-14
-
-
-- 应用 incremental 到 datafile 中的Image copy 上 。 注: 这个文件只有一份
-
-
RMAN> backup incremental level 1 for recover of copy with tag 'd1' datafile 4;
-
-
Starting backup at 01-JUN-14
-
using channel ORA_DISK_1
-
channel ORA_DISK_1: starting incremental level 1 datafile backup set
-
channel ORA_DISK_1: specifying datafile(s) in backup set
-
input datafile file number=00004 name=D:\APP\ADMINISTRATOR\ORADATA\ZTSYS\USERS01
-
.DBF
-
channel ORA_DISK_1: starting piece 1 at 01-JUN-14
-
channel ORA_DISK_1: finished piece 1 at 01-JUN-14
-
piece handle=D:\APP\ADMINISTRATOR\FAST_RECOVERY_AREA\ZTSYS\BACKUPSET\2014_06_01\
-
O1_MF_NNND1_D1_9RO8YR4X_.BKP tag=D1 comment=NONE
-
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
-
Finished backup at 01-JUN-14
-
-
Starting Control File and SPFILE Autobackup at 01-JUN-14
-
piece handle=D:\APP\ADMINISTRATOR\FAST_RECOVERY_AREA\ZTSYS\AUTOBACKUP\2014_06_01
-
\O1_MF_S_849095641_9RO8YSY2_.BKP comment=NONE
-
Finished Control File and SPFILE Autobackup at 01-JUN-14
-
现在的image copy 是最新的。 那么我们如何做到利用一个最新的image copy 快速切换进数据库中,使数据库坏的表空间迅速恢复呢?
-
例子:
-
rman>
-
switch datafile 4 to copy;
-
recover datafile 4;
-
sql> alter database datafile 4 offline -- 自动使 tablespace offline
-
rman恢复完毕: alter database datafile 4 online -- 不自动使 tablespace on
-
alter tablespace users online
-
-
和从前一样 不影响 tablespace users 的使用。
-
如果 还是想还原以前的 users 文件,操作如下:
-
创建 现在image copy 的一个copy :
-
backup as copy datafile 'D:\app\Administrator\fast_recovery_area\ztsys\DATAFILE\O1_MF_USERS_9RO7MPRR_.DBF' format ' D:\app\Administrator\oradata\ztsys\users01.dbf'; -- 在执行位置创建 一个copy 。 不知道可不可以 copy image copy 到新的位置在进行 recover 没有发现方法,有人知道请留言
-
这样就拷贝了一个
-
alter database datafile 4 offline
-
switch datafile 4 to copy;
-
recover datafile 4;
-
alter database datafile 4 online
-
从第一个主机拷贝rman 备份到测试主机进行还原
正在找好的文章
-
-
-
--附录:
-
1、 实验中丢失了控制文件但是有rman 备份。
-
mount 数据库 ,寻找rman 中能否直接还原, restore controlfile from autobackup 没有结果不行。
-
搜了一个包:
-
DECLARE
-
devtype varchar2(256);
-
done boolean;
-
BEGIN
-
devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'T1');
-
sys.dbms_backup_restore.restoreSetDatafile;
-
--要还原的目的地
-
sys.dbms_backup_restore.restoreControlfileTo(cfname=>'E:\app\Administrator\oradata\ztsys\control01.ctl');
-
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'E:\app\Administrator\flash_recovery_area\ztsys\BACKUPSET\2014_05_31\O1_MF_NCSNF_TAG20140531T182325_9RMCHDWS_.BKP',params=>null);
-
sys.dbms_backup_restore.deviceDeallocate;
-
END;
-
/
-
-
-- spfile 挂掉 随便找到一个 启动一下实例,之后运行脚本提取spfile
-
DECLARE
-
devtype varchar2(256);
-
done boolean;
-
BEGIN
-
devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'T1');
-
sys.dbms_backup_restore.restoreSetDatafile;
-
--要还原的目的地
-
sys.dbms_backup_restore.RESTORESPFILETO(pfname=>'E:\app\Administrator\flash_recovery_area\ztsys\BACKUPSET\2014_05_31\initztsys.ora');
-
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'E:\app\Administrator\flash_recovery_area\ztsys\AUTOBACKUP\2014_06_01\O1_MF_S_849110650_9ROQMWK2_.BKP',params=>null);
-
sys.dbms_backup_restore.deviceDeallocate;
-
END;
-
/
-
具体可以还原到自己想要的目录
-
2、 rman 进行全备的时候自动备份 control + spfile 这个和 CONFIGURE CONTROLFILE AUTOBACKUP OFF; 无关
-
-
3、非归档模式还原恢复
-
shutdown -> 还原所有文件 include control ->open
-
-
看脚本:
-
run{
-
set until time '2014/06/01 15:00:21';-- 这里也可以用手动创建的还原点,或者是scn 号
-
restore database;
-
recover database;
-
}
-
-
注: 时间| scn 确定; 时间格式确定:
-
$ export NLS_LANG = american_america.us7ascii
-
$ export NLS_DATE_FORMAT = "yyyy-mm-dd:hh24:mi:ss"
-
-
alter database open read only --查看标志性 数据是否正确
-
alter database open resetlog -- 重置redo 打开数据库
-
-
-
还原一个spfile 文件:有catalog 的前提
-
-
RMAN> STARTUP FORCE NOMOUNT;
-
RMAN> RESTORE SPFILE FROM AUTOBACKUP;
-
RMAN> STARTUP FORCE;
-
-
-
--
-
RMAN> STARTUP NOMOUNT;
-
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
-
RMAN> ALTER DATABASE MOUNT;
-
RMAN> RECOVER DATABASE;
-
RMAN> ALTER DATABASE OPEN RESETLOGS