今天出一份linux下oracle數據庫rman備份配置文檔供參考,目前不少環境,我都用這份文檔在作備份,若是有寫的不對的地方還請鐵友們指正,我好到生產環境改正。linux
備份級別說明
一、Level 0級全備是各增量備份的基礎;
二、增量備份分兩種狀況,incremental和cumulitive,前者備份跟本身同級或比本身級別低的,後者只備份比本身級別低的;
三、incremental備份說明:level1備份上一次level1或level0以來的變化,level2備份上一次level2或level1或level0以來的變化;
四、cumulitive備份說明:level1備份上一次level0以來的變化,level2備份上一次level1或level0以來的變化。
相關注意說明
一、在數據量比較小、或者數據庫服務器性能很強大的狀況下,能夠天天進行一次全備份;
二、若是備份後須要把備份文件存放到阿里雲的OSS存儲上,因爲OSS存儲有4GB大小限制,須要修改如下三個rman配置,限制RMAN備份片的大小sql
一、level0_backup.rman文件 allocate channel C2 type disk ; --修改前 allocate channel C2 type disk maxpiecesize = 3500M ; --修改後 二、level1_backup.rman文件 allocate channel C3 type disk ; --修改前 allocate channel C3 type disk maxpiecesize = 3500M ; --修改後 三、level2_backup.rman文件 allocate channel C4 type disk ; --修改前 allocate channel C4 type disk maxpiecesize = 3500M ; --修改後
三、配置crontab定時任務,注意避開業務繁忙時段
四、使用oracle用戶配置定時任務,若是須要使用root用戶配置定時任務,計劃任務腳本章節要注意修改環境變量,以及執行腳本注意oracle用戶要對相關路徑具有讀寫執行權限。數據庫
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
以上全部目錄請作好異地備份。bash
保留最後5次備份數據:
天天凌晨04:45刪除多餘和無效的備份;
天天12點與20點備份歸檔日誌;
天天03點20進行數據庫的0級徹底備份;服務器
這裏採用的天天全備,你們可根據實際須要,週一到週六增備,週日全備。
時間 週一至週日
12:00 日誌備份
20:00 日誌備份
03:20 徹底備份
將腳本加入oracle用戶的crontab裏面,讓其按策略自動運行,可根據實際需求調整計劃任務。oracle
$ 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
將 oracle 數據庫置於「安裝模塊」以啓用日誌歸檔模式,歸檔的日誌存儲在快速恢復區域中ide
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;
$ 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';
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
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