RMAN完全備份
阿新 • • 發佈:2021-07-07
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恢復
此實驗在上一節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 wheretable_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