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

RMAN備份

RMAN備份

【官方文件】

Backup and Recovery Reference

Backup and Recovery User's Guide

1 備份檔案型別

1.1 backupset備份集

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

  使用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刪掉,然後啟動資料庫報錯

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;  刪除不加提示