RMAN備份介紹


RMAN備份

【官方文檔】

  Backup and Recovery Reference

  Backup and Recovery User's Guide

1 備份文件類型

1.1 backupset備份集

  不備份datafile里面從未使用塊、可以實現增量備份(可以備份到disk和tape)。可以使用壓縮,如果只啟用一個channel,默認會把所有備份的datafile放入到一個backupset里,並且生成一個備份片backup piece

  使用section size時,一個backupset中可以包含多個backup piece

1.1.1 備份全庫

① RMAN> backup database format='/u01/backup/rman/prod_%s.bak' filesperset 3;

② RMAN> backup database plus archivelog delete input;

說明:備份所有數據文件及控制文件、spfile文件與所有歸檔日志,並刪除舊的歸檔日志,當deleteinput后,控制文件相關信息(v$archived_log)也會被更新。archivelog物理日志也被刪除

③ RMAN> backup database format '/u01/backup/rman/%U.bak' plus archivelog delete input skip inaccessible;

說明:archivelog的備份是根據控制文件中(v$archived_log)中的內容導航的,如果控制文件中記錄了而實際歸檔中又不存在,則會報錯,skip inaccessible的含義是跳過物理上缺失的日志文件

因為有了全備,隨時可以還原備份,還原點之前的歸檔日志可以刪除,如果想單獨還原歸檔日志備份可以使用:restore archivelog all;

1.1.2 備份表空間

RMAN> backup tablespace users format '/u01/backup/rman/users_%U.bak' tag=userbak;

1.1.3 備份數據文件

RMAN> backup datafile 3,5 format '/u01/backup/rman/%d_%s.bak';

備份數據文件,可以一次備份多個,以“,” 分開

1.1.4 備份歸檔日志

查看當前數據庫中歸檔日志

RMAN> list archivelog all;

備份所有歸檔日志,備份完成后刪除庫里的歸檔日志文件

RMAN> backup archivelog all delete input;

將歸檔日志文件從備份轉儲回庫中

RMAN> restore archivelog all;

1.1.5 備份控制文件

RMAN> backup current controlfile;

1.1.6 備份參數文件

RMAN> backup spfile;

1.2 image copy(映像文件)備份

1.2.1 image copy(映像文件)

  實際上和手工cp類似的,備份datafile所有的數據塊,不能作為增量備份的基礎(即0級增量備份),只能備份到disk,不能備份到tape,優點是可以省略還原步驟,恢復數據庫速度快

1.2.2 語法

① RMAN> copy datafile 4 to '/u01/backup/rman/users_%s.bak';

② RMAN> backup as copy tablespace 'TEST' format '/u01/backup/rman/%d_test_%s.bak';

建議使用backup語法,統一格式

backup as copy database format '/u01/backup/rman/%U.bak';
list datafilecopy all;

刪除

delete datafilecopy all;

 

2 rman冷熱備腳本參考

2.1 rman冷備腳本

vi /u01/backup/rman/cold.sql

寫入腳本:

run{
shutdown immediate;
startup mount;
allocate channel c1 device type disk;
allocate channel c2 device type disk;
backup database format '/u01/backup/rman/db_%d_%T_%U.bak';
backup current controlfile format '/u01/backup/rman/ctl_%d_%T_%U.bak';
alter database open;
release channel c1;
release channel c2;
}

2.2 rman熱備

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

 

3 增量備份incremental backup

【官方文檔】

  Database Backup and Recovery User's Guide ---> 8 RMAN Backup Concepts ---> Incremental Backups

3.1 概念

  只備份自某次備份以來發生變化的blockRMAN在備份時會記錄data blockscn,下次備份時通過比較某次備份數據塊上的scn來確定該數據塊是否發生變化

0級增量備份可以理解為完全備份

1級增量備份分為兩種:

  差異增量備份:只包含上次增量備份(0級或1級)到現在增加或者修改的數據塊

  累計增量備份:只包含上次增量備份(0級,也就是完全備份)到現在增加或者修改的數據塊

3.2 兩種增量策略

差異增量備份Differential incremental backup:以某次以來同級別或低級別的備份作為基礎備份

累積增量備份Cumulative incremental backup):以某次以來比自己級別低的備份作為基礎備份

10g以后,增量備份只有0級和1,原來2級以上的級別可兼容,但不推薦使用

0級增量備份,省略differential描述默認的就是差異增量備份

backup incremental level 0 database format '/u01/backup/rman/%U.bak';

1累積增量備份

backup cumulative incremental level 1 database;

1差異增量備份

backup incremental level 1 database format '/u01/backup/rman/%U.bak';

3.3 注意事項

① 0級增量備份不等同於全備(full backup),全備不能做為增量備份的基礎備份,0級增量備份可以

② 如果沒有備份過0級備份,那么第一次1級備份(差異或累計)就當做0級備份

③ 非歸檔情況下的恢復就只有還原備份這一步,在RMAN下的方法是:

startup force mount;

restore database;

alter database open resetlogs;

如果非歸檔情況下使用了增量備份,在restore第二句后,加上recover database noredo;

這個命令有兩個作用:

  1. 定位所有級別為1的累計或差異增量備份並使用它們
  2. 不應用日志

3.4 塊變更跟蹤(block change tracking)OCM內容

3.4.1 概念

  增量備份總是小於完整備份,但是備份時的時間並不像想象的那樣少,原因是增量備份默認的是要掃描整個要備份的數據文件塊,以便確定哪些塊需要提取,如果想要增量備份能快些,可以使能增量備份的塊改變跟蹤功能

  塊改變跟蹤在后台啟動一個進程叫CTWR,這個進程向變更跟蹤文件中記錄每個已更改的塊的地址。如果啟用了塊跟蹤,增量備份時就去檢查塊跟蹤文件,這比遍歷整個數據文件塊要快的多。當然缺點是數據庫維護塊跟蹤文件會付出性能代價,所以實際工作中此特性通常不在生產庫上配置

3.4.2 實戰案例演示(OCM內容

3.4.2.1 使能塊改變跟蹤
alter database enable block change tracking using file '/u01/app/oracle/oradata/ORCL/change_tracking';

3.4.2.2 查看視圖信息

確認已啟動了CTWR進程確認生成了塊改變跟蹤文件

col filename for a50
select * from v$block_change_tracking;

3.4.2.3 開始0級增量做為基礎備份
backup incremental level 0 database format '/u01/backup/rman/%U.bak';

3.4.2.4 開始1級增量備份
backup incremental level 1 database format '/u01/backup/rman/%U.bak';

3.4.2.5 關閉塊改變跟蹤
alter database disable block change tracking;
select * from v$block_change_tracking;

3.4.2.6 再次執行1級增量備份對比
backup incremental level 1 database format '/u01/backup/rman/%U.bak';

考點:使能塊改變跟蹤后,需要一個相當於incremental level 0 backup做為基礎備份

3.5 使用增量更新image copy備份

  增量更新特性是以一個image copy為基礎,將增量備份應用到這個image copy,在做每日的imcremental level 1時,image copy是不斷的累積的,好處是這個累積的image copyscn越來越新,且使用它恢復數據庫時不需要還原,命令如下:

run {
recover copy of database with tag 'incr_update';
backup incremental level 1 for recover of copy with tag 'incr_update' database;
}

這個例子每天執行一次,會是什么樣的結果?

第一天,backup命令將創建一個的相當於level 0的image copy,因為之前沒有這個備份

第二天,backup命令創建一個level 1的backupset

第三天以及以后的每一天,recovercopy命令將把level 1應用(疊加)到image copy,從而不斷的更新它

最大的優勢是image copy不斷的累計,可以省去還原步驟,從而節省了大量恢復數據的時間

3.6 增量熱備腳本參考

3.6.1 level 0

run{
crosscheck backup;
allocate channel c1 device type disk;
allocate channel c2 device type disk;
backup incremental level 0 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';
report obsolete device type disk;
delete noprompt obsolete device type disk;
delete noprompt expired backup device type disk;
release channel c1;
release channel c2;
}

3.6.2 level 1

run{
crosscheck backup;
allocate channel c1 device type disk;
allocate channel c2 device type disk;
backup incremental level 1 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';
report obsolete device type disk;
delete noprompt obsolete device type disk;
delete noprompt expired backup device type disk;
release channel c1;
release channel c2;
}

 

4 歸檔備份backup ... keep

  在Oracle11g中,可以使用backup keep命令保留比RMAN備份保留策略所指定的時間更長的備份。它可以構造能保留數年的備份不被obsolete),歸檔備份之所能使備份長久保存,關鍵是使用keep選項覆蓋掉了RMAN中缺省的保留策略

KEEP FOREVER永不過期(需要catalog)在Oracle 11g

KEEP UNTIL TIME后跟一個時間長度,如表示一年:'sysdate+365'

RESOTRE POINT的作用記錄這次備份的唯一性,rename表示的scn已被記錄下來,rename不能重名

示例(備份日期2021年7月5日):

backup tablespace users format '/u01/backup/rman/users_%U.bak' keep until time 'sysdate+7' restore point orclbak;

也可以在備份列表中看到obsolete日期

可以查看RESOTRE POINT renamescn的對應關系

list restore point all;

delete backup;

 

5 數據恢復顧問DRA實戰案例(OCM內容

  DRA(Data Recovery Advisor)是一個診斷和恢復數據庫的工具,通過兩個途徑操作,一個是RMAN界面,另一個是EM,它依賴於ADR的自動診斷信息以及Health Monitor

5.1 RMAN備份sysaux表空間

backup tablespace SYSAUX format '/u01/backup/rman/sysaux_%U.bak';
list backup;

5.2 關閉數據庫,將sysaux01.dbf刪掉,然后啟動數據庫報錯

模擬關鍵表空間損壞,然后啟動數據庫,報system.dbf讀寫錯誤

shutdown abort;
cd /u01/app/oracle/oradata/ORCL/
rm sysaux01.dbf

startup

5.3 數據庫在mount模式下連接rman

rman target /

5.4 DRA列出發現的問題

list failure;

5.5 DRA來診斷一下問題所在

advise failure;

修復腳本:/u01/app/oracle/diag/rdbms/orcl/orcl/hm/reco_3580709036.hm

cat /u01/app/oracle/diag/rdbms/orcl/orcl/hm/reco_3580709036.hm

5.6 根據報告決定讓DRA修復

repair failure;

注意:

list failure,然后再advise failure次序不能錯, 修復問題的順序是list、advise、repair

② 所有啟動模式下都可以使用DRA,nomount下修復控制文件,mountopen下修復數據文件

③ DRA目前只能在單實例下運行,RAC不可以使用它

 

6 備份集狀態

6.1 備份集的狀態

①AVAILABLE:可用

②UNAVAILABLE:不可用

③EXPIRED:過期(RMAN元數據還在,備份文件損壞或丟失)

當備份元數據存在,但OS物理備份片已經被刪除了這時備份集的狀態就是Expired

RMAN的crosscheck命令檢查備份片是否仍然存在於備份介質上,如不存在,則狀態由AVAILABLE改為EXPIRED記錄着

AVAILABLE/UNAVAILABLE的轉換使用change命令

CHANGE BACKUPSET 1 UNAVAILABLE;

6.2 備份集狀態實驗

6.2.1 執行備份 查看狀態

清理之前的備份

delete backup

備份保留策略為默認的redundancy 1,續備份兩次users表空間

backup tablespace users format '/u01/backup/rman/users_%U.bak';
backup tablespace users format '/u01/backup/rman/users_%U.bak'

查看當前users表空間備份狀態

list backup of tablespace users;

6.2.2 設置備份集為unavailable不可用狀態

change backupset 33 unavailable;

list backup of tablespace users;

恢復備份集狀態

change backupset 33 available;
list backup of tablespace users;

6.2.3 查看obsolete過時的備份

report obsolete;

第一次備份users表空間生成的備份片已經屬於obsolete過時的、淘汰的備份。但這些備份依然是available狀態,是有效的可以用來進行restore還原的

6.2.4 模擬備份文件丟失

cd /u01/backup/rman
ll -lnt
mv users_150372hp_1_1.bak users_150372hp_1_1.bak.bak
ll -lnt

6.2.5 crosscheck交叉校驗

直接list backup查看,仍然是available,執行crosscheck backup進行校驗

list backup of tablespace users;
crosscheck backup;
list backup of tablespace users;

6.2.6 查看expired狀態備份

list expired backup;

6.2.7 恢復備份文件,再次查看

mv users_150372hp_1_1.bak.bak users_150372hp_1_1.bak
crosscheck backup;
list backup of tablespace users;

6.2.8 如何刪除expired狀態備份

delete expired backup;
delete noprompt expired backup;

delete expired不會影響磁盤上的文件,而是清除rman元數據中此備份的記錄

6.3 expiredobsolete區別

expired  過期的。rman元數據中有這個備份,但磁盤上備份文件丟失不存在

obsolete  過時的,淘汰的。根據保留策略已經不需要,可以刪除。但仍然是available可用狀態

report obsolete     /     list expired

delete expired  不刪除磁盤上的文件,只是將expired狀態備份信息從rman元數據中刪掉

delete obsolete  刪除磁盤上過時的備份文件(歸檔日志)

 

7 catalog命令維護rman元數據

7.1 概念

目的是對RMAN存儲庫進行編目

RMAN元數據受損或者備份文件被移動到新的目錄時,只有我們手里只有備份,便可以根據備份的物理路徑重新編目RMAN元數據

這種方法可以將早期的老化的備份,重新(要有磁盤路徑) 注冊到target controlfile中,也可以完成向一個空的RMAN存儲庫(重做控制文件后)通過catalog命令注冊元數據

7.2 常見的語法

RMAN> CATALOG DATAFILECOPY '/disk1/old_datafiles/01_01_2021/users01.dbf';

RMAN> CATALOG ARCHIVELOG '/disk1/arch_logs/archive1_731.log';

RMAN> CATALOG BACKUPPIECE '/disk1/backups/backup_820.bak';

RMAN> CATALOG START WITH '/disk1/backups/';

可以一次完成一個目錄樹下的所有文件的注冊通過提供一個OS路徑,RMAN自動導航找到要編目的所有備份片(包括其子目錄)

7.3 注冊備份到元數據(controlfile

7.3.1 構造expired狀態備份並刪除

cd /u01/backup/rman
mv users_150372hp_1_1.bak users_150372hp_1_1.bak.bak
crosscheck backup;
list expired backup;
delete noprompt expired backup;

7.3.2 將重命名以后的備份文件注冊到rman元數據

catalog backuppiece '/u01/backup/rman/users_150372hp_1_1.bak.bak';
list backup of tablespace users;

7.4 刪除元數據

change backuppiece 37 uncatalog;

37號備份片從RMAN元數據中刪掉了,但物理備份users_150372hp_1_1.bak.bak還在

7.5 catalog注冊手工備份文件

ll /u01/backup/orcl/hot

catalog start with '/u01/backup/orcl/hot/';

list datafilecopy all;

 

8 RMAN常用命令一覽

管理備份:報告

使用以下RMAN命令可獲取有關備份的信息:

LIST:顯示資料檔案庫中記錄的有關備份集、代理副本和映像副本的信息

REPORT:生成資料檔案庫的詳細分析信息

REPORT NEED BACKUP:列出需要備份的所有數據文件

REPORT OBSOLETE:標識按照備份保留策略不再需要的文件

管理備份:交叉檢查和刪除

使用以下RMAN命令可管理備份:

CROSSCHECK:針對介質(如磁盤或磁帶)驗證在RMAN資料檔案庫中記錄的備份和副本的狀態

DELETE EXPIRED:只刪除資料檔案庫中狀態為EXPIRED的文件

DELETE OBSOLETE:刪除不再需要的備份

8.1 list命令一覽

RMAN> list backup;

RMAN> list backup of tablespace users;

RMAN> list backup of datafile 2;

RMAN> list backup of controlfile;

RMAN> list backup of archivelog all;

RMAN> list backup of archivelog until time ='sysdate -1';

RMAN> list backupset 56;

RMAN> list copy;  包括歸檔日志

RMAN> list datafilecopy all;

RMAN> list copy of tablespace users;

RMAN> list copy of datafile 1;

RMAN> list datafilecopy 67;

RMAN> list copy of controlfile;

RMAN>list expired backup;

RMAN> list archivelog all;

8.2 report報告命令一覽

RMAN> REPORT schema;  查看目標庫的物理結構

RMAN> REPORT obsolete;  根據備份保留策略來判斷,那些備份是陳舊的(obsolete)

RMAN> REPORT OBSOLETE redundancy 2;

RMAN> REPORT need backup;  根據備份保留策略,列出哪些數據文件需要備份

RMAN> REPORT NEED BACKUP redundancy 2;

RMAN> REPORT NEED BACKUP recovery window of 3 days;

8.3 delete刪除備份命令一覽

RMAN> delete backup of datafile 2;

RMAN> delete backup of tablespace system;

RMAN> delete backupset ;

RMAN> delete backupset 30,32;

RMAN> delete backup of controlfile;

RMAN> delete noprompt backup of controlfile; noprompt;  刪除不提示確認

RMAN> delete datafilecopy all;

RMAN> delete copy of datafile 10;

RMAN> delete copy of tablespace users;

RMAN> delete expired backup;  刪除過期的備份

RMAN> delete expired archivelog all;  刪除過期的歸檔,更新v$archived_log視圖

RMAN> delete expired copy;

RMAN> delete obsolete;  刪除陳舊的備份

RMAN> delete noprompt obsolete;  刪除不加提示


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM