這是一個生產庫的rman備份shell指令碼,分為 0級備份 與1級差異累積備份,每周一次0層級備份,其他1級差異累積備份。
1、0層級備份shell 指令碼:
- #!/bin/sh
- #### 2011.6.27 ####
- #level=0#
- export TMP=/tmp
- export TMPDIR=/tmp
- export Oracle_BASE=/opt/oracleonder
- export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
- export ORACLE_SID=onder
- export PATH=$PATH:$ORACLE_HOME/bin:
- export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
- export BAKFILE=/opt/bak/bak0.log
- find /opt/bak/archbak -mtime +365 -name "arch*.tar.bz2" -exec rm -rf {} \; ###因為每周只執行0級備份,歸檔日誌不能自動刪除(只有執行##全備,歸檔備份才會被設定為無效),所以這裡寫了一條命令來刪除儲存策略外的歸檔記錄備份。
- rman nocatalog target / msglog $BAKFILE << EOF
- run{
- CONFIGURE CONTROLFILE AUTOBACKUP ON;
- CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/opt/bak/conf_%F_%T.tar.bz2';
- CONFIGURE RETENTION POLICY TO REDUNDANCY 20;
- configure device type disk parallelism 1 backup type to compressed backupset;
- report obsolete;
- delete noprompt obsolete;
- crosscheck backup;
- delete noprompt expired backup;
- backup incremental level=0 database format '/opt/bak/bak_%T_%U_%t_%d.tar.bz2' plus archivelog format '/opt/bak/archbak/arch_%U_%s.tar.bz2';
- DELETE noprompt ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-30';
- crosscheck archivelog all; ##檢查出系統中不存在的歸檔日誌記錄,雖然上邊的命令是刪除超過30天的歸檔日誌,但是相關記錄記#錄依然存在。
- delete noprompt expired archivelog all; ###noprompt 參數是不需要確認直接刪除,用指令碼必備。
- }
- EOF