1. 程式人生 > 其它 >RMAN完全備份

RMAN完全備份

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表空間損壞,使用EMDRA恢復

此實驗在上一節RMAN備份介紹處已有

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;

檢視t1表所存在表空間

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

3.2 模擬users表空間損壞,刪除資料檔案

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

3.3 清除快取,查證訪問資料檔案失敗

清除後session要重新登入,實驗中為防備rman登入不正常,可以嘗試先做個檢查點切換

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

3.4 建立新目錄

假設介質損壞了,更換需要時間,先把資料檔案恢復到一個新的目錄下(不同的物理位置)

mkdir -p /u01/tempfile/ORCL

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';
}

說明:

  ①set newname for告訴RMAN還原資料檔案的新位置在哪裡。這個命令在restore前出現

  ②switch datafile更新controlfile,讓控制檔案使用這個新位置恢復資料。這個命令要在recover前出現

3.6 驗證

select * from scott.t1;
select tablespace_name,file_name from dba_data_files;

3.7介質更換完成後,可以將表空間遷移回原來位置

alter tablespace users offline;

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

更新控制檔案和資料字典

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;

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;

4.2 刪除t2表所在表空間的資料檔案

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

4.3 清除快取,查證訪問資料檔案失敗

alter system flush buffer_cache;

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';
}

4.5 驗證

select * from scott.t2;

刪除表空間

drop tablespace test including contents and datafiles;

5 【實戰案例4】使用image copy快速恢復資料檔案(無需restore

5.1 使用copy方式備份users表空間資料檔案

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

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

5.2 模擬datafile7檔案損壞

刪除datafile7

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

5.3 資料檔案offline

alter database datafile 7 offline;

5.4 switch copy切換資料檔案

switch datafile 7 to copy;
col file_name for a80
select file_id,file_name from dba_data_files;

5.5 recover恢復並online資料檔案

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

5.6 恢復到正常路徑

alter tablespace users offline;
mv /u01/backup/rman/df7.bak /u01/app/oracle/oradata/ORCL/users01.dbf
alter tablespace users rename datafile '/u01/backup/rman/df7.bak' to '/u01/app/oracle/oradata/ORCL/users01.dbf';
alter tablespace users online;
select file_id,file_name from dba_data_files;

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