rman 備份指令碼
---備份自動資料庫指令碼
10 10 * * 6 su - oracle -c "/nfsbk/script/rmbk.sh 0 oral /nfsbk/rmanfs 10 15 4"
10 10 * * 3 su - oracle -c "/nfsbk/script/rmbk.sh 1 oral /nfsbk/rmanfs 10 15 4"
透過傳入引數,實現全庫備份或增量備份,可定製日誌和資料庫備份保留策略;
<eof
<eof
<eof|$tee -a="" $logfile<eof
<eof|$tee -a="" $logfile<eof|$tee -a="" $logfile<eof|$tee -a="" $logfile<eof|$tee -a="" $logfile#!/bin/sh
# 編寫: 劉建 2010.01.15(版本1.0)
# update:wcj 2018/5/25 10:11:10
# 功能: 源資料庫根據事先定製的備份策略,定期執行資料備份任務。
# 呼叫方式:RmanBackup.sh 備份模式 ORACLE_SID 備份的目標資料夾 本地歸檔日誌存放有效天數 備份資料有效天數 備份程式並行度
# 注:備份模式 0: 0級全備份 1: 1級增量備份
# 例如: ./RmanBackup.sh 0 orcl /opt/ora10g/backup 3 3 2
# 執行方式:(1)以oracle使用者身份登入linux後手工執行
# (2)以oracle使用者身份自動執行的crontab任務
#
#mkdir -p /backup/rmanfs
#mkdir -p /backup/script
#--上傳備份指令碼
#chown -R oracle:oinstall /backup
#測試
#./rmbk.sh 0 oral /backup/rmanfs 15 5 2
#計劃任務呼叫
#crontab -e
#10 20 1,10,20 * * su - oracle -c "/backup/script/rmbk.sh 0 oral /backup/rmanfs 10 5 4"
#10 20 * * 5 su - oracle -c "/backup/script/rmbk.sh 0 oral /backup/rmanfs 8 8 8"
#10 20 * * 1,2,3,4,6,7 su - oracle -c "/backup/script/rmbk.sh 1 oral /backup/rmanfs 8 8 8"
##########################################################################################################################
###################################################
#開始指令碼的各項初始化工作
#先核對命令列中,引數是否齊備
if [ $# -lt 6 ]
then
echo "==========================================================================================================="
echo "Usage:"
echo "RmanBackup.sh {BackupMode} {ORACLE_SID} {BackupDirectory} {ArchRetainDay} {BakFileRetainDay} {Parallelism} "
echo "RmanBackup.sh 備份模式0或1 ORACLE_SID 備份目錄 歸檔日誌保留天數 備份資料保留天數 備份並行度"
echo "請詳細核對命令列中需要設定的6個引數是否完整:"
echo "==========================================================================================================="
exit 1
fi
#執行變數
source $HOME/.bash_profile
TEE=/usr/bin/tee
RMAN=$ORACLE_HOME/bin/rman
SQLPLUS=$ORACLE_HOME/bin/sqlplus
export ORACLE_SID=$2
#目錄變數
BACKUPDEST=$3
if [ ! -d $BACKUPDEST ]
then
echo "請詳細核對“備份的目標資料夾”引數是否正確,此資料夾無法正常訪問!"
exit 1
fi
#日誌檔案
if [ ! -d $BACKUPDEST/backupLogs ]
then
mkdir $BACKUPDEST/backupLogs
fi
LOGFILE=$BACKUPDEST/backupLogs/rmanbackup_`date +%Y%m%d%H%M%S`.log
#檢查資料庫是否已經處於“歸檔模式”下
$SQLPLUS "/ as sysdba" <<EOF
spool AL.log
SELECT LOG_MODE FROM V\$DATABASE;
spool off
EXIT
EOF
STATUS=`grep -i "NOARCHIVELOG" AL.log|wc -l`
if [ $STATUS -eq 1 ]
then
echo "當前ORACLE資料庫未執行在“歸檔模式”下,不能進行聯機熱備,請完善相關配置!"
exit 1
fi
###########################################################
#啟用“塊跟蹤”功能,並設定塊跟蹤日誌檔案的檔名及其存放路徑
if [ ! -d $ORACLE_BASE/blocktrack ]
then
mkdir $ORACLE_BASE/blocktrack
fi
#檢查是否已經啟用了“塊跟蹤”功能
$SQLPLUS "/ as sysdba" <<EOF
spool BCT.log
SELECT STATUS FROM V\$BLOCK_CHANGE_TRACKING;
spool off
EXIT
EOF
STATUS=`grep -i "ENABLED" BCT.log|wc -l`
if [ $STATUS -eq 0 ]
then
$SQLPLUS "/ as sysdba" <<EOF|$TEE -a $LOGFILE
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '$ORACLE_BASE/blocktrack/blcokchangetrack.f';
EXIT
EOF
fi
###########################################################
#修改初始化引數---控制檔案儲存備份檔案資訊的天數,擴大為1年
$SQLPLUS "/ as sysdba" <<EOF
spool KD.log
SHOW PARAMETER control_file_record_keep_time
spool off
EXIT
EOF
STATUS=`grep -i "integer" KD.log| awk '{print $3}'`
if [ $STATUS -lt 365 ]
then
$SQLPLUS "/ as sysdba" <<EOF|$TEE -a $LOGFILE
ALTER SYSTEM SET CONTROL_FILE_RECORD_KEEP_TIME = 365 SCOPE=BOTH;
EXIT
EOF
fi
###########################################################
# 防止RMAN可能對部分過期備份檔案漏刪除,這裡用OS的命令補做
#find $BACKUPDEST -name "20*_L0_*.bak" -mtime +$5 -exec rm {} ;
#find $BACKUPDEST -name "20*_L1_*.bak" -mtime +$5 -exec rm {} ;
#find $BACKUPDEST -name "20*_c-*" -mtime +$5 -exec rm {} ;
###########################################################
#開始執行備份工作
#開始0級備份
if [ $1 -eq 0 ]
then
$RMAN <<EOF|$TEE -a $LOGFILE
CONNECT TARGET
CONFIGURE BACKUP OPTIMIZATION ON;
#若開啟CF的自動備份規則,那麼RMAN會在每個資料檔案發生備份時產生1個控制檔案備份(僅第一個記錄在案),
#這勢必造成備份檔案過多的問題,因此需要遮蔽此規則
#CONFIGURE CONTROLFILE AUTOBACKUP on;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '$BACKUPDEST/%T_control_%F.bak';
#備份檔案的保持策略(即保留天數,過期將會被delete noprompt obsolete語句自動刪除)
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF $5 DAYS;
#並行度(決定開啟併發的備份通道個數,多併發可以加快備份速度,但要和CPU核數、磁碟實際的吞吐能力匹配)
CONFIGURE DEVICE TYPE DISK PARALLELISM $6 BACKUP TYPE TO BACKUPSET;
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
#0級全備份;控制檔案(spfile也會包含)需同步備份,且每次backup僅備份產生1個控制檔案備份。
BACKUP as compressed backupset INCREMENTAL LEVEL 0 FORMAT '$BACKUPDEST/%T_db_L0_%s_%p.bak' section size 30g TAG 'BackupL0' DATABASE INCLUDE CURRENT CONTROLFILE;
#因為在備份過程中,某些資料檔案可能仍然被修改(已經備份的檔案的SCN會比控制檔案最後記錄的SCN要小),仍然產生redoLog,
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
crosscheck archivelog all;
backup as compressed backupset archivelog all format '$BACKUPDEST/%T_arch_%s_%p.bak';
#備份完成後,自動清除處於失效期的本地歸檔日誌(即僅保留 $4 天之內的)
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-$4';
#根據先前制定的備份保留策略,自動刪除過期失效檔案
CROSSCHECK BACKUP;
DELETE NOPROMPT EXPIRED BACKUP;
DELETE NOPROMPT OBSOLETE;
EXIT;
EOF
else
####################################################################################################
#開始1級備份
$RMAN <<EOF|$TEE -a $LOGFILE
CONNECT TARGET
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '$BACKUPDEST/%T_control_%F.bak';
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF $5 DAYS;
CONFIGURE DEVICE TYPE DISK PARALLELISM $6 BACKUP TYPE TO BACKUPSET;
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP as compressed backupset INCREMENTAL LEVEL 1 FORMAT '$BACKUPDEST/%T_db_L1_%s_%p.bak' section size 30g TAG 'BackupL1' DATABASE INCLUDE CURRENT CONTROLFILE;
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
crosscheck archivelog all;
backup as compressed backupset archivelog all not backed up 1 times format '$BACKUPDEST/%T_arch_%s_%p.bak';
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-$4';
CROSSCHECK BACKUP;
DELETE NOPROMPT EXPIRED BACKUP;
DELETE NOPROMPT OBSOLETE;
EXIT;
EOF
fi
#備份控制檔案
#rm $ORACLE_BASE/new.ctl
#不要直接備份到$BACKUPDEST目錄
#$SQLPLUS "/ as sysdba" <<EOF|$TEE -a $LOGFILE
#ALTER DATABASE BACKUP CONTROLFILE TO '$ORACLE_BASE/new.ctl';
#exit;
#EOF
#cp $ORACLE_BASE/new.ctl $BACKUPDEST/`date +%Y%m%d%H%M%S`.ctl
</eof
</eof
</eof
10 10 * * 6 su - oracle -c "/nfsbk/script/rmbk.sh 0 oral /nfsbk/rmanfs 10 15 4"
10 10 * * 3 su - oracle -c "/nfsbk/script/rmbk.sh 1 oral /nfsbk/rmanfs 10 15 4"
透過傳入引數,實現全庫備份或增量備份,可定製日誌和資料庫備份保留策略;
<eof
<eof
<eof|$tee -a="" $logfile<eof
<eof|$tee -a="" $logfile<eof|$tee -a="" $logfile<eof|$tee -a="" $logfile<eof|$tee -a="" $logfile#!/bin/sh
# 編寫: 劉建 2010.01.15(版本1.0)
# update:wcj 2018/5/25 10:11:10
# 功能: 源資料庫根據事先定製的備份策略,定期執行資料備份任務。
# 呼叫方式:RmanBackup.sh 備份模式 ORACLE_SID 備份的目標資料夾 本地歸檔日誌存放有效天數 備份資料有效天數 備份程式並行度
# 注:備份模式 0: 0級全備份 1: 1級增量備份
# 例如: ./RmanBackup.sh 0 orcl /opt/ora10g/backup 3 3 2
# 執行方式:(1)以oracle使用者身份登入linux後手工執行
# (2)以oracle使用者身份自動執行的crontab任務
#
#mkdir -p /backup/rmanfs
#mkdir -p /backup/script
#--上傳備份指令碼
#chown -R oracle:oinstall /backup
#測試
#./rmbk.sh 0 oral /backup/rmanfs 15 5 2
#計劃任務呼叫
#crontab -e
#10 20 1,10,20 * * su - oracle -c "/backup/script/rmbk.sh 0 oral /backup/rmanfs 10 5 4"
#10 20 * * 5 su - oracle -c "/backup/script/rmbk.sh 0 oral /backup/rmanfs 8 8 8"
#10 20 * * 1,2,3,4,6,7 su - oracle -c "/backup/script/rmbk.sh 1 oral /backup/rmanfs 8 8 8"
##########################################################################################################################
###################################################
#開始指令碼的各項初始化工作
#先核對命令列中,引數是否齊備
if [ $# -lt 6 ]
then
echo "==========================================================================================================="
echo "Usage:"
echo "RmanBackup.sh {BackupMode} {ORACLE_SID} {BackupDirectory} {ArchRetainDay} {BakFileRetainDay} {Parallelism} "
echo "RmanBackup.sh 備份模式0或1 ORACLE_SID 備份目錄 歸檔日誌保留天數 備份資料保留天數 備份並行度"
echo "請詳細核對命令列中需要設定的6個引數是否完整:"
echo "==========================================================================================================="
exit 1
fi
#執行變數
source $HOME/.bash_profile
TEE=/usr/bin/tee
RMAN=$ORACLE_HOME/bin/rman
SQLPLUS=$ORACLE_HOME/bin/sqlplus
export ORACLE_SID=$2
#目錄變數
BACKUPDEST=$3
if [ ! -d $BACKUPDEST ]
then
echo "請詳細核對“備份的目標資料夾”引數是否正確,此資料夾無法正常訪問!"
exit 1
fi
#日誌檔案
if [ ! -d $BACKUPDEST/backupLogs ]
then
mkdir $BACKUPDEST/backupLogs
fi
LOGFILE=$BACKUPDEST/backupLogs/rmanbackup_`date +%Y%m%d%H%M%S`.log
#檢查資料庫是否已經處於“歸檔模式”下
$SQLPLUS "/ as sysdba" <<EOF
spool AL.log
SELECT LOG_MODE FROM V\$DATABASE;
spool off
EXIT
EOF
STATUS=`grep -i "NOARCHIVELOG" AL.log|wc -l`
if [ $STATUS -eq 1 ]
then
echo "當前ORACLE資料庫未執行在“歸檔模式”下,不能進行聯機熱備,請完善相關配置!"
exit 1
fi
###########################################################
#啟用“塊跟蹤”功能,並設定塊跟蹤日誌檔案的檔名及其存放路徑
if [ ! -d $ORACLE_BASE/blocktrack ]
then
mkdir $ORACLE_BASE/blocktrack
fi
#檢查是否已經啟用了“塊跟蹤”功能
$SQLPLUS "/ as sysdba" <<EOF
spool BCT.log
SELECT STATUS FROM V\$BLOCK_CHANGE_TRACKING;
spool off
EXIT
EOF
STATUS=`grep -i "ENABLED" BCT.log|wc -l`
if [ $STATUS -eq 0 ]
then
$SQLPLUS "/ as sysdba" <<EOF|$TEE -a $LOGFILE
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '$ORACLE_BASE/blocktrack/blcokchangetrack.f';
EXIT
EOF
fi
###########################################################
#修改初始化引數---控制檔案儲存備份檔案資訊的天數,擴大為1年
$SQLPLUS "/ as sysdba" <<EOF
spool KD.log
SHOW PARAMETER control_file_record_keep_time
spool off
EXIT
EOF
STATUS=`grep -i "integer" KD.log| awk '{print $3}'`
if [ $STATUS -lt 365 ]
then
$SQLPLUS "/ as sysdba" <<EOF|$TEE -a $LOGFILE
ALTER SYSTEM SET CONTROL_FILE_RECORD_KEEP_TIME = 365 SCOPE=BOTH;
EXIT
EOF
fi
###########################################################
# 防止RMAN可能對部分過期備份檔案漏刪除,這裡用OS的命令補做
#find $BACKUPDEST -name "20*_L0_*.bak" -mtime +$5 -exec rm {} ;
#find $BACKUPDEST -name "20*_L1_*.bak" -mtime +$5 -exec rm {} ;
#find $BACKUPDEST -name "20*_c-*" -mtime +$5 -exec rm {} ;
###########################################################
#開始執行備份工作
#開始0級備份
if [ $1 -eq 0 ]
then
$RMAN <<EOF|$TEE -a $LOGFILE
CONNECT TARGET
CONFIGURE BACKUP OPTIMIZATION ON;
#若開啟CF的自動備份規則,那麼RMAN會在每個資料檔案發生備份時產生1個控制檔案備份(僅第一個記錄在案),
#這勢必造成備份檔案過多的問題,因此需要遮蔽此規則
#CONFIGURE CONTROLFILE AUTOBACKUP on;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '$BACKUPDEST/%T_control_%F.bak';
#備份檔案的保持策略(即保留天數,過期將會被delete noprompt obsolete語句自動刪除)
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF $5 DAYS;
#並行度(決定開啟併發的備份通道個數,多併發可以加快備份速度,但要和CPU核數、磁碟實際的吞吐能力匹配)
CONFIGURE DEVICE TYPE DISK PARALLELISM $6 BACKUP TYPE TO BACKUPSET;
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
#0級全備份;控制檔案(spfile也會包含)需同步備份,且每次backup僅備份產生1個控制檔案備份。
BACKUP as compressed backupset INCREMENTAL LEVEL 0 FORMAT '$BACKUPDEST/%T_db_L0_%s_%p.bak' section size 30g TAG 'BackupL0' DATABASE INCLUDE CURRENT CONTROLFILE;
#因為在備份過程中,某些資料檔案可能仍然被修改(已經備份的檔案的SCN會比控制檔案最後記錄的SCN要小),仍然產生redoLog,
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
crosscheck archivelog all;
backup as compressed backupset archivelog all format '$BACKUPDEST/%T_arch_%s_%p.bak';
#備份完成後,自動清除處於失效期的本地歸檔日誌(即僅保留 $4 天之內的)
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-$4';
#根據先前制定的備份保留策略,自動刪除過期失效檔案
CROSSCHECK BACKUP;
DELETE NOPROMPT EXPIRED BACKUP;
DELETE NOPROMPT OBSOLETE;
EXIT;
EOF
else
####################################################################################################
#開始1級備份
$RMAN <<EOF|$TEE -a $LOGFILE
CONNECT TARGET
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '$BACKUPDEST/%T_control_%F.bak';
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF $5 DAYS;
CONFIGURE DEVICE TYPE DISK PARALLELISM $6 BACKUP TYPE TO BACKUPSET;
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP as compressed backupset INCREMENTAL LEVEL 1 FORMAT '$BACKUPDEST/%T_db_L1_%s_%p.bak' section size 30g TAG 'BackupL1' DATABASE INCLUDE CURRENT CONTROLFILE;
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
crosscheck archivelog all;
backup as compressed backupset archivelog all not backed up 1 times format '$BACKUPDEST/%T_arch_%s_%p.bak';
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-$4';
CROSSCHECK BACKUP;
DELETE NOPROMPT EXPIRED BACKUP;
DELETE NOPROMPT OBSOLETE;
EXIT;
EOF
fi
#備份控制檔案
#rm $ORACLE_BASE/new.ctl
#不要直接備份到$BACKUPDEST目錄
#$SQLPLUS "/ as sysdba" <<EOF|$TEE -a $LOGFILE
#ALTER DATABASE BACKUP CONTROLFILE TO '$ORACLE_BASE/new.ctl';
#exit;
#EOF
#cp $ORACLE_BASE/new.ctl $BACKUPDEST/`date +%Y%m%d%H%M%S`.ctl
</eof
</eof
</eof
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2154317/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分享Oracle Rman的備份指令碼Oracle指令碼
- oracle資料庫使用rman備份指令碼Oracle資料庫指令碼
- 備份指令碼指令碼
- 【RMAN】RMAN備份至ASMASM
- RMAN備份概述
- 【RMAN】RMAN的備份保留策略
- mysql備份指令碼MySql指令碼
- ORACLE備份指令碼Oracle指令碼
- RMAN備份恢復典型案例——RMAN備份&系統變慢
- RMAN備份進度
- RMAN的備份原理
- 自動備份指令碼指令碼
- windows mysqldump備份指令碼WindowsMySql指令碼
- ORACLE NBU調取oracle rman指令碼備份歸檔不自動刪除歸檔Oracle指令碼
- rman 增量備份恢復
- Oracle RMAN備份實戰Oracle
- Oracle OCP(60):RMAN 備份Oracle
- RMAN備份恢復技巧
- 【rman備份策略】實驗
- expdp 邏輯備份指令碼指令碼
- 資料庫備份指令碼資料庫指令碼
- 兩套mysql備份指令碼MySql指令碼
- 【RMAN】同時建立多個備份(建立多重備份)
- 【RMAN】在備庫執行rman備份時報錯RMAN-06820 ORA-17629
- RMAN備份詳解(轉載)
- [20190522]rman備份問題.txt
- RMAN 備份相關的概念
- 使用RMAN備份資料庫資料庫
- RMAN備份異機恢復
- oracle自動冷備份指令碼Oracle指令碼
- MySQL中binlog備份指令碼分享MySql指令碼
- 使用shell 指令碼備份資料指令碼
- ORACLE常用定時備份指令碼Oracle指令碼
- oracle 12c rman備份pdbOracle
- 利用RMAN備份重建資料庫資料庫
- RMAN備份恢復效能優化優化
- RMAN備份中發現壞塊
- RMAN備份與恢復測試