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 概念
只備份自某次備份以來發生變化的block。RMAN在備份時會記錄data block的scn,下次備份時通過比較某次備份數據塊上的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的累計或差異增量備份並使用它們
- 不應用日志
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 copy的scn越來越新,且使用它恢復數據庫時不需要還原,命令如下:
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 rename和scn的對應關系
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下修復控制文件,mount或open下修復數據文件
③ 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 expired和obsolete區別
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; 刪除不加提示