Linux下oracle_rman備份配置參考文檔

今天出一份linux下oracle數據庫rman備份配置文檔供參考,目前很多環境,我都用這份文檔在做備份,如果有寫的不對的地方還請鐵友們指正,我好到生產環境改正。

1. 目錄設置

1.1. Rman備份說明

 備份級別說明
1、Level 0級全備是各增量備份的基礎;
2、增量備份分兩種情況,incremental和cumulitive,前者備份跟自己同級或比自己級別低的,後者只備份比自己級別低的;
3、incremental備份說明:level1備份上一次level1或level0以來的變化,level2備份上一次level2或level1或level0以來的變化;
4、cumulitive備份說明:level1備份上一次level0以來的變化,level2備份上一次level1或level0以來的變化。
 相關注意說明
1、在數據量比較小、或者數據庫服務器性能很強大的情況下,可以每天進行一次全備份;
2、如果備份後需要把備份文件存放到阿里雲的OSS存儲上,由於OSS存儲有4GB大小限制,需要修改以下三個rman配置,限制RMAN備份片的大小






1、level0_backup.rman文件
allocate channel C2 type disk ;                        --修改前
allocate channel C2 type disk maxpiecesize = 3500M ;  --修改後
2、level1_backup.rman文件
allocate channel C3 type disk ;                        --修改前
allocate channel C3 type disk maxpiecesize = 3500M ;  --修改後
3、level2_backup.rman文件
allocate channel C4 type disk ;                        --修改前
allocate channel C4 type disk maxpiecesize = 3500M ;  --修改後

3、配置crontab定時任務,注意避開業務繁忙時段
4、使用oracle用戶配置定時任務,如果需要使用root用戶配置定時任務,計劃任務腳本章節要注意修改環境變量,以及執行腳本注意oracle用戶要對相關路徑具備讀寫執行權限。

1.2. 目錄說明

daemon庫備份腳本路徑:/backup/rman/scripts/
歸檔文件按日期備份: /backup/arch/date +%Y%m%d
控制文件備份: /backup/rman/controlfile
數據庫文件按日期備份: /backup/rman/data/date +%Y%m%d
按日期生成備份日誌: /backup/rman/logs/date +%Y%m%d
RMAN備份腳本: /backup/rman/scripts
以上所有目錄請做好異地備份。





2. rman備份

2.1. 備份策略

 保留最後5次備份數據:
 每天凌晨04:45刪除多餘和無效的備份;
 每天12點與20點備份歸檔日誌;
 每天03點20進行數據庫的0級完全備份;


2.2. 備份計劃

這裏採用的每天全備,大家可根據實際需要,週一到週六增備,週日全備。
時間 週一至週日
12:00 日誌備份
20:00 日誌備份
03:20 完全備份
將腳本加入oracle用戶的crontab裏面,讓其按策略自動運行,可根據實際需求調整計劃任務。




$ crontab -e
20 03 * * * /backup/rman/scripts/level0_backup.sh
45 04 * * * /backup/rman/scripts/delobsolete.sh
00 12 * * * /backup/rman/scripts/arch.sh
00 20 * * * /backup/rman/scripts/arch.sh

2.3. 準備工作

將 oracle 數據庫置於“安裝模塊”以啓用日誌歸檔模式,歸檔的日誌存儲在快速恢復區域中

mkdir -p /backup/arch
mkdir -p /backup/rman/controlfile
mkdir /backup/rman/data
mkdir /backup/rman/logs
mkdir /backup/rman/scripts
chown -R oracle:oinstall /backup

以下數據庫連接前設置連接SID

$ export ORACLE_SID=daemon
$ sqlplus / as sysdba
SQL> SELECT log_mode from v$database;


輸出的結果爲ARCHIVELOG表示已經開啓歸檔
輸出的結果爲NOARCHIVELOG表示未開啓歸檔


(1)操作開啓歸檔日誌

$ sqlplus / as sysdba
SQL> shutdown immediate;
startup mount;
alter database archivelog;
alter database open;

(2)啓用更改跟蹤功能記錄自上次備份以來更改的數據塊位置,以提升增量備份的性能。更改跟蹤文件默認保存在快速恢復區域中(使用RMAN 增量備份時啓動block change tracking以縮短RMAN 備份的時間)。

$ sqlplus / as sysdba
SQL> shutdown immediate;
startup mount
alter system set db_create_file_dest='/u01/oracle/fast_recovery_area';
alter database enable block change tracking;
alter database open;

(3)查看、修改閃回區大小(大小根據實際情況修改)

SQL> show parameter db_recovery_file_dest;
alter system set db_recovery_file_dest_size=40G scope=both;
shutdown immediate;
startup;

2.4. rman配置

$ rman target /
CONFIGURE RETENTION POLICY TO REDUNDANCY 5;
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 5 DAYS;

上面兩句只能使用一種條件,保存5個副本或者5天的恢復窗口(建議使用恢復窗口),請按需調整

CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/controlfile/%F';
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/backup/rman/controlfile/snapcf_daemon.f';

2.5. rman腳本

1) delobsolete.rman

cd /backup/rman/scripts
$ vi delobsolete.rman
run {
  crosscheck backup;
  delete noprompt obsolete;
  delete noprompt expired backup;
}
exit

2) arch.rman

$ vi arch.rman
sql 'alter system archive log current' ;
run {
allocate channel C1 type disk FORMAT '/backup/arch/' ;
backup 
skip inaccessible
tag arch_daemon
filesperset 10 format '/backup/arch/%T/arch_%T_%d_%t_%s_%p' archivelog all delete input;
release channel C1;
}
exit

3) level0_backup.rman

$ vi level0_backup.rman
sql 'PURGE DBA_RECYCLEBIN';
sql 'alter system archive log current' ;
run {
allocate channel C2 type disk ;
backup 
incremental level 0 
skip inaccessible 
tag full0_daemon
DATABASE 
filesperset 5 format '/backup/rman/data/%T/db_0_%T_%d_%t_%s_%p';
release channel C2;
}
exit

4) level1_backup.rman

$ vi level1_backup.rman
sql 'PURGE RECYCLEBIN';
sql 'alter system archive log current' ;
run {
allocate channel C3 type disk ;
backup 
incremental level 1
skip inaccessible 
tag level1_daemon
DATABASE 
filesperset 5 format '/backup/rman/data/%T/db_1_%T_%d_%t_%s_%p_inc' ;
release channel C3;
}
exit

5) level2_backup.rman

$ vi level2_backup.rman
sql 'PURGE RECYCLEBIN';
sql 'alter system archive log current' ;
run {
allocate channel C4 type disk ;
backup 
incremental level 2
skip inaccessible 
tag level2_daemon
DATABASE 
filesperset 5 format '/backup/rman/data/%T/db_2_%T_%d_%t_%s_%p_inc' ;
release channel C4;
}
exit

2.6. 計劃任務腳本

1) delobsolete.sh

$ vi delobsolete.sh
#!/bin/sh
#export LANG=en_US
source /home/oracle/.bash_profile
export ORACLE_SID=daemon
mkdir /backup/rman/logs/`date +%Y%m%d`
rman target / cmdfile=/backup/rman/scripts/delobsolete.rman msglog=/backup/rman/logs/`date +%Y%m%d`/`date +%Y%m%d_%H%M_obsolete.log`
exit

2) arch.sh

$ vi arch.sh
#!/bin/sh
#export LANG=en_US
source /home/oracle/.bash_profile
export ORACLE_SID=daemon
mkdir /backup/arch/`date +%Y%m%d`
mkdir /backup/rman/logs/`date +%Y%m%d`
rman target / cmdfile=/backup/rman/scripts/arch.rman msglog=/backup/rman/logs/`date +%Y%m%d`/`date +%Y%m%d_%H%M_arch.log`
exit

3) level0_backup.sh

$ vi level0_backup.sh
#!/bin/sh
#export LANG=en_US
source /home/oracle/.bash_profile
export ORACLE_SID=daemon
mkdir /backup/rman/data/`date +%Y%m%d`
mkdir /backup/rman/logs/`date +%Y%m%d`
rman target / cmdfile=/backup/rman/scripts/level0_backup.rman msglog=/backup/rman/logs/`date +%Y%m%d`/`date +%Y%m%d_%H%M_0.log`
exit

4) level1_backup.sh

$ vi level1_backup.sh
#!/bin/sh
#export LANG=en_US
source /home/oracle/.bash_profile
export ORACLE_SID=daemon
mkdir /backup/rman/data/`date +%Y%m%d`
mkdir /backup/rman/logs/`date +%Y%m%d`
rman target / cmdfile=/backup/rman/scripts/level1_backup.rman msglog=/backup/rman/logs/`date +%Y%m%d`/`date +%Y%m%d_%H%M_1.log`
exit

5) level2_backup.sh

$ vi level2_backup.sh
#!/bin/sh
#export LANG=en_US
source /home/oracle/.bash_profile
export ORACLE_SID=daemon
mkdir /backup/rman/data/`date +%Y%m%d`
mkdir /backup/rman/logs/`date +%Y%m%d`
rman target / cmdfile=/backup/rman/scripts/level2_backup.rman msglog=/backup/rman/logs/`date +%Y%m%d`/`date +%Y%m%d_%H%M_2.log`
exit

3. 結束

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章