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語句,不儲存
1個channel在一個時刻只能通過一個backupset
1個backupset可以裝在多個inputfile(最多64)
1個backupset可以對應多個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 SIZE,maxpiecesize只能在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備份、歸檔是否刪除正常