基於Linux下 Oracle 備份策略(RMAN)
--**********************************
-- 基於Linux下 Oracle 備份策略(RMAN)
--**********************************
對於 Oracle 數據庫的備份與恢復,盡管存在熱備,冷備以及邏輯備份之外,使用最多的莫過於使用RMAN進行備份與恢復。而制定RMAN備份策
略則是基於數據庫丟失的容忍程度,即恢復策略來制定。在下面的備份策略中,給出的是一個通用的備份策略。在該備份策略中,使用了catalog方
式來保持備份腳本以及備份資訊。在實際環境中應根據具體的情況對此進行相應的調整。
一、步驟
1.確認備份可用空間以及備份路徑,根據需要創建相應檔案夾
1.對於賬戶的連接創建一個connect.rcv,該檔案包含連接到target 和catalog資訊
2.創建通用的指令碼用於刪除過舊的備份和備份控制檔案以及備份歸檔日誌
global_del_obso --刪除過舊的備份
global_bkctl --備份控制檔案
global_arch --備份歸檔日誌
3.創建0,1,2級增量備份
這三個指令碼中均包含第2步的3個指令碼,先調用global_del,然後做增量備份,最後備份歸檔日誌global_arch和控制檔案global_bkctl
4.創建inc0.rcv,inc1.rcv,inc2.rcv
檔案內容包含調用 @@/
5.編輯第4步的三個檔案分別為inc0.sh,inc1.sh,inc2.sh
nohup $ORACLE_HOME/bin/rman cmdfile=/u03/bk/scripts/inc1.rcv log=/u03/bk/scripts/inc0.logappend &
6.使用crontab制定備份計劃
二、具體實現
演示環境:
系統: CentOS release 4.6 (Final) + Oracle 10g
目標數據庫: austin
恢復目錄數據庫: david
備份目錄: /u03/bk
連接指令碼所在路徑:/u03/bk/scripts
注:監聽需要配置好且已啟動
1.連接指令碼
connect.rcv檔案內容
connect catalog rman/rman@david;
connect target sys/oracle@austin;
catalog的通用指令碼
rman cmdfile=/u03/bk/scripts/connect.rcv --(在rman中使用外部指令碼)
rman catalog rman/rman@david target sys/oracle@austin --使用該指令碼連接後創建通用指令碼
2.建立通用指令碼
--刪除不必要的備份
RMAN> create global script global_del_obso comment 'A script for obsolete backup and delete it' {
2> crosscheck archivelog all;
3> delete noprompt expired archivelog all;
4> allocate channel ch1 device type disk;
5> delete noprompt obsolete recovery window of 7 days;
6> release channel ch1;
7> }
--備份控制檔案指令碼
RMAN> create global script global_bkctl comment 'A script for backup control file'{
2> allocate channel ch1 device type disk;
3> backup as compressed backupset
4> current controlfile reuse
5> format='/u03/bk/backupctl.ctl'
6> tag='bkctl';
7> release channel ch1;
8> }
--備份歸檔日誌指令碼
RMAN> create global script global_arch comment "backup archivelog and then delete it" {
2> allocate channel ch1 device type disk;
3> allocate channel ch2 device type disk;
4> sql "alter system archive log current"; --歸檔當前的聯機日誌
5> set limit channel ch1 readrate=10240; --(讀取速率10M)
6> set limit channel ch1 kbytes=4096000; --(備份片的大小)
7> backup as compressed backupset
8> format='/u03/bk/arch_%d_%U'
9> tag='bkarch'
10> archivelog all delete input;
11> release channel ch1;
12> release channel ch2;
13> }
--使用list查看所有的已建立的全域性指令碼
list global script names; --(列出所有的指令碼)
delete globals script script_name; --(刪除指令碼)
RMAN> list global script names;
List of Stored Scripts in Recovery Catalog
Global Scripts
Script Name
Description
-----------------------------------------------------------------------
global_arch
backup archivelog and then delete it
global_bkctl
A script for backup control file
global_del_obso
A script for obsolete backup and delete it
3.創建0,1,2級增量備份指令碼(注:每個指令碼備份前會執行刪除過舊的備份,指令碼尾部會調用另外兩個指令碼來備份歸檔日誌及控制檔案)
--創建0級增量備份
RMAN> create global script global_inc0 comment "backup database as incrmental level 0"{
2> execute global script global_del_obso;
3> allocate channel ch1 device type disk;
4> allocate channel ch2 device type disk;
5> set limit channel ch1 readrate=10240;
6> set limit channel ch1 kbytes=4096000;
7> set limit channel ch2 readrate=10240;
8> set limit channel ch2 kbytes=4096000;
9> backup as compressed backupset
10> incremental level 0 database
11> format='/u03/bk/inc0_%d_%U'
12> tag='inc0';
13> release channel ch1;
14> release channel ch2;
15> execute global script global_arch;
16> execute global script global_bkctl;
17> }
--創建1級增量備份
RMAN> create global script global_inc1 comment "backup database as incrmental level 1"{
2> execute global script global_del_obso;
3> allocate channel ch1 device type disk;
4> allocate channel ch2 device type disk;
5> set limit channel ch1 readrate=10240;
6> set limit channel ch1 kbytes=4096000;
7> set limit channel ch2 readrate=10240;
8> set limit channel ch2 kbytes=4096000;
9> backup as compressed backupset
10> incremental level 1 database
11> format='/u03/bk/inc1_%d_%U'
12> tag='inc1';
13> release channel ch1;
14> release channel ch2;
15> execute global script global_arch;
16> execute global script global_bkctl;
17> }
--創建2級增量備份
RMAN> create global script global_inc2 comment "backup database as incrmental level 2"{
2> execute global script global_del_obso;
3> allocate channel ch1 device type disk;
4> allocate channel ch2 device type disk;
5> set limit channel ch1 readrate=10240;
6> set limit channel ch1 kbytes=4096000;
7> set limit channel ch2 readrate=10240;
8> set limit channel ch2 kbytes=4096000;
9> backup as compressed backupset
10> incremental level 2 database
11> format='/u03/bk/inc2_%d_%U'
12> tag='inc2';
13> release channel ch1;
14> release channel ch2;
15> execute global script global_arch;
16> execute global script global_bkctl;
17> }
--在rman中檢驗在rman中寫的指令碼global_inc0、global_inc1、global_inc2,因為RMAN不會自動檢查,下面的語句用來執行指令碼(檢驗)
RMAN> run{
2> execute global script global_inc0;
3> execute global script global_inc1;
4> execute global script global_inc2;
5> }
--查看備份完成情況
list backupset summary;
4.建立shell指令碼,讓linux自動執行指令碼
a. vi inc0.rcv,inc1.rcv ,inc2.rcv --注意不同的檔案執行不同的備份指令碼
@@/u03/bk/scripts/connect.rcv --(rman下的指令碼去調用其他指令碼用@@符號)(調用指令碼不需要分號)
run{
execute global script gloal_inc0;
}
exit;
b. 編輯shell檔案
vi inc0.sh
nohup $ORACLE_HOME/bin/rman cmdfile=/u03/bk/scripts/inc0.rcvlog=/u03/bk/scripts/inc0.log append &
vi inc1.sh
nohup $ORACLE_HOME/bin/rman cmdfile=/u03/bk/scripts/inc1.rcvlog=/u03/bk/scripts/inc0.log append &
vi inc2.sh
nohup $ORACLE_HOME/bin/rman cmdfile=/u03/bk/scripts/inc2.rcvlog=/u03/bk/scripts/inc0.log append &
--注意:nohup與&表示將指令碼放入後臺執行
c.使用crontab建立一個備份計劃
crontab -e
#min hour date mon day(星期) command
30 1 * * 0 /u03/bk/scripts/inc0.sh
30 1 * * 1 /u03/bk/scripts/inc2.sh
30 1 * * 2 /u03/bk/scripts/inc2.sh
30 1 * * 3 /u03/bk/scripts/inc2.sh
30 1 * * 4 /u03/bk/scripts/inc1.sh
30 1 * * 5 /u03/bk/scripts/inc2.sh
30 1 * * 6 /u03/bk/scripts/inc2.sh
d.重啟crontab服務(如果沒有啟動)
# /sbin/service crond status --用於檢查crontab 服務狀態
# /sbin/service crond stop //關閉服務
# /sbin/service crond restart //重啟服務
# /sbin/service crond reload //重新載入配置
使crontab服務在系統啟動的時候自動啟動:
在/etc/rc.d/rc.local這個指令碼的末尾加上:
/sbin/service crond start
e.從上面的備份策略來看,即
週日執行0級增量備份,相當於全備
週一,週二,週三執行2級增量備份
週四執行1級增量備份
週五,週六執行2級增量備份
f.編輯好的shell 指令碼測試
chmod 755 *.sh --給shell指令碼加權限
測試指令碼 例如./inc0.sh
三、總結
1.backup controlfile in each scripts tail (在指令碼的尾部備份控制檔案)
2.Delete obsolete backupset in each scripts threshold (刪除舊的備份)
3.Switch logfile before backup database; (在數據庫備份以前切換日志,備份聯機重做日誌)
4.Chmod u+x*.sh
本文根據德哥RMAN:Oracle數據庫一週備份方案的設計 整理完成
四、 快捷參考
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23490154/viewspace-1062409/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle備份及備份策略及基於Linux下 Oracle 備份策略(RMAN)OracleLinux
- 三種Oracle RMAN備份加密策略(下)Oracle加密
- Oracle ADG環境下的RMAN備份策略Oracle
- rman 備份策略
- oracle rman備份及策略設定Oracle
- RAC模式下的備份策略以及RMAN備份指令碼模式指令碼
- RMAN 備份策略 scripts
- oracle10g RMAN增量備份策略Oracle
- 三種Oracle RMAN備份加密策略(上)Oracle加密
- 探索ORACLE之RMAN_05備份策略Oracle
- 【RMAN】RMAN的備份保留策略
- RAC模式下的備份策略以及RMAN備份指令碼(轉)模式指令碼
- RAC模式下的備份策略以及RMAN備份指令碼(ZF)模式指令碼
- Unix/Linux下,Oracle備份策略一例LinuxOracle
- aix下rac環境rman備份策略部署AI
- RMAN說,我能備份(9)--RMAN增量備份與備份保留策略
- 【rman備份策略】實驗
- rman備份集的保留策略
- linux 下RMAN備份shell指令碼Linux指令碼
- ORACLE備份策略Oracle
- RMAN說,我能備份(18)--制訂備份策略
- oracle之rman備份Oracle
- Oracle RMAN 增量備份Oracle
- oracle rman備份命令Oracle
- 【轉】Oracle rman備份Oracle
- 關於WINDOWS平臺下RMAN備份移植Windows
- linux 備份策略Linux
- ORACLE備份策略(轉)Oracle
- ORACLE備份策略(1)Oracle
- ORACLE備份策略(2)Oracle
- ORACLE備份策略(3)Oracle
- ORACLE備份策略(4)Oracle
- Oracle 11g RMAN備份-增量備份Oracle
- Oracle RMAN備份實戰Oracle
- Oracle OCP(60):RMAN 備份Oracle
- oracle RMAN備份指令碼Oracle指令碼
- RMAN 常用操作命令二(備份保留策略)
- 一次rman備份 策略調整