RMAN完全备份

1 概念

1)recover恢复:

  ① 归档模式:完全恢复和不完全恢复

restore)

2)执行rman备份脚本先对数据库做一个备份(如果是archived模式可以做热备)

3)实现完全恢复,需要自备份以来的归档日志和当前日志文件完整,保证日志的连续性

1.1 提前清理表空间,做好全库备份

热备脚本

vi /u01/backup/rman/hot.sql

写入:

run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
backup database format '/u01/backup/rman/db_%d_%T_%U.bak' plus archivelog format '/u01/backup/rman/ar_%d_%T_%U.bak';
backup current controlfile format '/u01/backup/rman/ctl_%d_%T_%U.bak';
release channel c1;
release channel c2;
}

 

2 【实战案例1】 system表空间损坏,使用EM的DRA恢复

 

3 【实战案例2】 恢复表空间到新路径(数据库open状态)

因非关键数据文件介质损坏,需要将其表空间恢复到一个新的物理位置

3.1 环境准备:创建表、插入数据

create table scott.t1 (id number);
insert into scott.t1 values(10);
insert into scott.t1 values(20);
insert into scott.t1 values(30);
commit;
conn / as sysdba
alter system checkpoint;
select * from scott.t1;

rman archive log 只备份当天 rman全备份_表空间

查看t1表所存在表空间

select table_name,tablespace_name from dba_tables where table_name='T1';

rman archive log 只备份当天 rman全备份_数据文件_02

3.2 模拟users表空间损坏,删除数据文件

rm /u01/app/oracle/oradata/ORCL/users01.dbf

rman archive log 只备份当天 rman全备份_oracle_03

3.3 清除缓存,查证访问数据文件失败

清除后session要重新登录,实验中为防备rman登录不正常,可以尝试先做个检查点切换

alter system flush buffer_cache;
select * from scott.t1;

rman archive log 只备份当天 rman全备份_数据文件_04

3.4 创建新目录

假设介质损坏了,更换需要时间,先把数据文件恢复到一个新的目录下(不同的物理位置)

mkdir -p /u01/tempfile/ORCL

rman archive log 只备份当天 rman全备份_表空间_05

3.5 使用RMAN恢复表空间

run{
sql 'alter database datafile 7 offline';
set newname for datafile 7 to '/u01/tempfile/ORCL/users01.dbf';
restore tablespace users;
switch datafile 7;
recover tablespace users;
sql 'alter database datafile 7 online';
}

rman archive log 只备份当天 rman全备份_表空间_06

说明:

set newname for告诉RMAN还原数据文件的新位置在哪里。这个命令在restore前出现

  ② switch datafile更新controlfile,让控制文件使用这个新位置恢复数据。这个命令要在recover前出现

3.6 验证

select * from scott.t1;

rman archive log 只备份当天 rman全备份_oracle_07

select tablespace_name,file_name from dba_data_files;

rman archive log 只备份当天 rman全备份_oracle_08

3.7 介质更换完成后,可以将表空间迁移回原来位置

alter tablespace users offline;

rman archive log 只备份当天 rman全备份_oracle_09

mv /u01/tempfile/ORCL/users01.dbf /u01/app/oracle/oradata/ORCL/

rman archive log 只备份当天 rman全备份_oracle_10

更新控制文件和数据字典

alter tablespace users rename datafile '/u01/tempfile/ORCL/users01.dbf' to '/u01/app/oracle/oradata/ORCL/users01.dbf';
alter tablespace users online;
select tablespace_name,file_name from dba_data_files;

rman archive log 只备份当天 rman全备份_表空间_11

 

4 【实战案例3】新建表空间(rman备份没有这个表空间),datafile被破坏

4.1 环境准备:创建表空间、插入数据

create tablespace test datafile '/u01/app/oracle/oradata/ORCL/test01.dbf' size 5m;
create table scott.t2 (id number) tablespace test;
insert into scott.t2 values(1000);
insert into scott.t2 values(1001);
insert into scott.t2 values(1002);
commit;
alter system checkpoint;

rman archive log 只备份当天 rman全备份_数据文件_12

4.2 删除t2表所在表空间的数据文件

rm /u01/app/oracle/oradata/ORCL/test01.dbf

rman archive log 只备份当天 rman全备份_表空间_13

4.3 清除缓存,查证访问数据文件失败

alter system flush buffer_cache;

rman archive log 只备份当天 rman全备份_表空间_14

4.4 利用rman恢复数据文件

注意:rman备份里没有test01.dbf

run {
sql 'alter database datafile 5 offline';
restore datafile 5;
recover datafile 5;
sql 'alter database datafile 5 online';
}

rman archive log 只备份当天 rman全备份_oracle_15

4.5 验证

select * from scott.t2;

rman archive log 只备份当天 rman全备份_表空间_16

删除表空间

drop tablespace test including contents and datafiles;

 

5 【实战案例4】使用image copy快速恢复数据文件(无需restore)

rman archive log 只备份当天 rman全备份_数据文件_17

5.1 使用copy方式备份users表空间数据文件

select file#,status,name from v$datafile;

rman archive log 只备份当天 rman全备份_表空间_18

backup as copy datafile 7 format '/u01/backup/rman/df7.bak';
list datafilecopy all;

rman archive log 只备份当天 rman全备份_数据文件_19

5.2 模拟datafile7文件损坏

删除datafile7

alter system checkpoint;
rm /u01/app/oracle/oradata/ORCL/users01.dbf

rman archive log 只备份当天 rman全备份_oracle_20

5.3 数据文件offline

alter database datafile 7 offline;

rman archive log 只备份当天 rman全备份_表空间_21

5.4 switch copy切换数据文件

switch datafile 7 to copy;

rman archive log 只备份当天 rman全备份_oracle_22

col file_name for a80
select file_id,file_name from dba_data_files;

rman archive log 只备份当天 rman全备份_oracle_23

5.5 recover恢复并online数据文件

recover datafile 7;
sql 'alter database datafile 7 online';

rman archive log 只备份当天 rman全备份_数据文件_24

5.6 恢复到正常路径

alter tablespace users offline;

rman archive log 只备份当天 rman全备份_表空间_25

mv /u01/backup/rman/df7.bak /u01/app/oracle/oradata/ORCL/users01.dbf

rman archive log 只备份当天 rman全备份_oracle_26

alter tablespace users rename datafile '/u01/backup/rman/df7.bak' to '/u01/app/oracle/oradata/ORCL/users01.dbf';

rman archive log 只备份当天 rman全备份_表空间_27

alter tablespace users online;
select file_id,file_name from dba_data_files;

rman archive log 只备份当天 rman全备份_表空间_28

也可以再次使用backup as copy、switch

rman archive log 只备份当天 rman全备份_数据文件_29