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

RMAN備份策略

RMAN備份策略

1 備份效率的考慮

  提高備份效率,即提高RMAN效能和吞吐量,相關的引數有並行通道數輸入資料檔案數備份集大小備份片數

  並行的數目決定了開啟通道的個數,當然也可以在RUN{}中指定通道來決定備份與恢復的並行程度。如果在RUN{}中指定了通道配置,將覆蓋掉環境配置引數中指定的預設並行度

  通常一個通道對應一個備份集

  引數影響可有全域性和區域性兩個層次,基本上分為:

PARALLELISM: 儲存在RMAN儲存庫。

CONFIGURE CHANNEL: 更新配置,儲存在RMAN儲存庫。如:RMAN> CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT '/u01/backup/rman/%U.bak';

ALLOCATE CHANNEL: 限於run{},不儲存

BACKUP限於本次backup語句,不儲存

1channel在一個時刻只能通過一個backupset

1backupset可以裝在多個inputfile(最多64)

1backupset可以對應多個backup piece

1.1 使用FILESPERSET引數限制備份集中的輸入檔案數

  指定每個備份集中一次可以包含輸入檔案最大數,該引數預設值為64。如果每個備份集中備份8個檔案,資料庫有20個檔案,那將只生成3個備份集,得到3個備份片,雖然開了4個通道,但並行度是3,有1個通道閒置。例:

RMAN> RUN{

ALLOCATE CHANNEL c1 DEVICE TYPE disk;

ALLOCATE CHANNEL c2 DEVICE TYPE disk;

ALLOCATE CHANNEL c3 DEVICE TYPE disk;

ALLOCATE CHANNEL c4 DEVICE TYPE disk;

BACKUP DATABASE FILESPERSET 8;

}

  假如取消ALLOCATE CHANNEL語句,則通道數按全域性變數PARALLELISM指定,假定為1,有20個檔案,FILESPERSET=8一個通道幹活,8個檔案組成一個備份集,每備份集對一個備份片,完成一個備份集再接下

一個備份集。序列的跑三趟

1.2 使用MAXPIECESIZE引數限制備份片大小

RMAN>run{

allocate channel c1 device type disk MAXPIECESIZE 300M;

backup datafile 1 format '/u01/backup/rman/%U.bak';

}

限定了最大備份片為300M,如果輸出檔案是800M(注意不是限制輸入檔案),則會在一個備份集中生成3個備份片

1.3 使用maxsetsize引數限制備份集大小

RMAN> backup database maxsetsize 800m format '/u01/backup/rman/%U.bak';

一個通道產生了多個備份集,每個備份集對一個備份片

注意:作為基本原則,一個備份集只能佔一個通道,一個輸入資料檔案不能分成多個備份集,所以這裡必須滿足:最大輸入檔案size<maxsetsize

1.4 使用SECTION SIZE子句設定多段備份(multisection backup

  通常一個數據檔案只能佔用一個通道,如何使單一資料檔案也能並行備份呢?對於某個較大的datafile,為提高備份效率,可以考慮採用多道關鍵字SECTION SIZE,並行化這個大檔案的備份

  使用SECTION SIZE子句設定多段備份(multisection backup

RMAN>RUN{

ALLOCATE CHANNEL c1 DEVICE TYPE disk;

ALLOCATE CHANNEL c2 DEVICE TYPE disk;

ALLOCATE CHANNEL c3 DEVICE TYPE disk;

BACKUP DATAFILE 1 SECTION SIZE 150M format '/u01/backup/rman/%U.bak';

}

注意:SECTION SIZE隱含限定maxpiecesize,maxpiecesize全域性生效時不能使用SECTION SIZE。(考點)所以,要使用SECTION SIZEmaxpiecesize只能在allocate channel中說明

2 rman增量熱備

2.1 rman備份策略

備份策略:每週日執行0級備份,週一至週六每天執行1級增量備份

配置保留策略redundancy 2,開啟控制檔案自動備份

CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
CONFIGURE CONTROLFILE AUTOBACKUP ON;

2.2 增量備份指令碼

建立存放指令碼的目錄

mkdir /home/oracle/rman_hot_scripts

建立0級增量備份指令碼

vi /home/oracle/scripts/rman_level0.sh

寫入:

#!/bin/bash
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORACLE_SID=orcl
export
PATH=/u01/app/oracle/product/19.3.0/dbhome_1/bin:/u01/app/oracle/product/19.3.0/dbhome_1/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oracle/.local/bin:/home/oracle/bin
rman target / << EOF
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_%U.bak' plus archivelog format '/u01/backup/rman/arch_%U.bak';
backup current controlfile format '/u01/backup/rman/ctl_%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;
} 
EOF
exit
rman_level0.sh

建立1級增量備份指令碼

vi /home/oracle/scripts/rman_level1.sh

寫入:

#!/bin/bash
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORACLE_SID=orcl
export
PATH=/u01/app/oracle/product/19.3.0/dbhome_1/bin:/u01/app/oracle/product/19.3.0/dbhome_1/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oracle/.local/bin:/home/oracle/bin
rman target / << EOF
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_%U.bak' plus archivelog format '/u01/backup/rman/arch_%U.bak';
backup current controlfile format '/u01/backup/rman/ctl_%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;
} 
EOF
exit
rman_level1.sh

chmod a+x /home/oracle/rman_hot_scripts/rman_level0.sh
chmod a+x /home/oracle/rman_hot_scripts/rman_level1.sh

2.3 測試指令碼執行

./home/oracle/rman_hot_scripts/rman_level0.sh
./home/oracle/rman_hot_scripts/rman_level1.sh

2.4 編寫crontab計劃任務

測試環境:整點進行0級備份,每15分鐘1級增量備份一次

crontab -e

寫入計劃任務:

0 * * * * /home/oracle/rman_hot_scripts/rman_level0.sh >> /u01/backup/rman/orcl_rman_L0_`date +\%Y\%m\%d_\%H\%M\%S`.log 2>&1
15,30,45 * * * * /home/oracle/rman_hot_scripts/rman_level1.sh >> /u01/backup/rman/orcl_rman_L1_`date +\%Y\%m\%d_\%H\%M\%S`.log 2>&1

時間格式如下:

f1   f2  f3  f4   f5   program
 *    *    *    *     *
 -    -     -    -    -
 |     |     |     |     |
 |     |     |     |    +-------- 星期中星期幾 (0 - 6) (星期天0)
 |     |     |    +------------ 月份 (1 - 12) 
 |     |    +---------------- 一個月中的第幾天 (1 - 31)
 |    +------------------- 小時 (0 - 23)
+----------------------- 分鐘 (0 - 59)

檢視備份情況是否正常,檢視相關備份日誌,檢視obsolete備份、歸檔是否刪除正常