1. 程式人生 > >linux 下RMAN備份shell指令碼

linux 下RMAN備份shell指令碼

       RMAN備份對於Oracle資料庫的備份與恢復簡單易用,成本低廉。對於使用非catalog方式而言,將RMAN指令碼嵌入到shell指令碼,然後再通過crontab來實現中小型資料庫資料庫備份無疑是首選。本文提供了一個簡單易用的基於linux shell下的RMAN備份指令碼供參考。大家可根據自己的需要進行適當調整。

##===========================================================
##   db_bak_rman.sh              
##   created by Robinson         
##   2011/11/07  
##   usage: db_bak_rman.sh <$ORACLE_SID> <$BACKUP_LEVEL>
##          BACKUP_LEVEL: 
##             F: full backup
##             0: level 0
##             1: level 1                           
##============================================================
#!/bin/bash
# User specific environment and startup programs

if [ -f ~/.bash_profile ]; 
then
. ~/.bash_profile
fi

ORACLE_SID=${1};                              export ORACLE_SID    
RMAN_LEVEL=${2};                              export RMAN_LEVEL
TIMESTAMP=`date +%Y%m%d%H%M`;                 export TIMESTAMP     
DATE=`date +%Y%m%d`;                          export DATE          
RMAN_DIR=/u02/database/${ORACLE_SID}/backup/rman;   export RMAN_DIR      
RMAN_DATA=${RMAN_DIR}/${DATE};                export RMAN_DATA     
#RMAN_LOG=$RMAN_DATA/log;                     export RMAN_LOG     
RMAN_LOG=/u02/database/${ORACLE_SID}/backup/rman/log  export RMAN_LOG 

# Check rman level 
#======================================================================
if [ "$RMAN_LEVEL" == "F" ];
then  unset INCR_LVL
      BACKUP_TYPE=full
else
      INCR_LVL="INCREMENTAL LEVEL ${RMAN_LEVEL}"
      BACKUP_TYPE=lev${RMAN_LEVEL} 
fi

RMAN_FILE=${RMAN_DATA}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP};       export RMAN_FILE
SSH_LOG=${RMAN_LOG}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}.log;      export SSH_LOG
MAXPIECESIZE=4G;                                                export MAXPIECESIZE

#Check RMAN Backup Path
#=========================================================================

if ! test -d ${RMAN_DATA}
then
mkdir -p ${RMAN_DATA}
fi

echo "---------------------------------" >>${SSH_LOG}
echo "   " >>${SSH_LOG}
echo "Rman Begin  to Working ........." >>${SSH_LOG}
echo "Begin time at:" `date` --`date +%Y%m%d%H%M` >>${SSH_LOG}

#Startup rman to backup 
#=============================================================================
$ORACLE_HOME/bin/rman log=${RMAN_FILE}.log <<EOF
connect target /
run {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${RMAN_FILE}_%F';
ALLOCATE CHANNEL 'ch1' TYPE DISK maxpiecesize=${MAXPIECESIZE};
ALLOCATE CHANNEL 'ch2' TYPE DISK maxpiecesize=${MAXPIECESIZE};
set limit channel ch1 readrate=10240;
set limit channel ch1 kbytes=4096000;
set limit channel ch2 readrate=10240;
set limit channel ch2 kbytes=4096000;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
BACKUP 
#AS COMPRESSED BACKUPSET 
${INCR_LVL}
DATABASE FORMAT '${RMAN_FILE}_%U' TAG '${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}';
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP ARCHIVELOG ALL FORMAT '${RMAN_FILE}_arc_%U' TAG '${ORACLE_SID}_arc_${TIMESTAMP}'
DELETE  INPUT;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL ch1;
RELEASE CHANNEL ch2;
}
sql "alter database backup controlfile to ''${RMAN_DATA}/cntl_${BACKUP_TYPE}.bak''";
exit;
EOF
RC=$?

cat ${RMAN_FILE}.log >>${SSH_LOG}
echo "Rman Stop working @ time:"`date` `date +%Y%m%d%H%M` >>${SSH_LOG}

echo >>${SSH_LOG}
echo "------------------------" >>${SSH_LOG}
echo "------ Disk Space ------" >>${SSH_LOG}
df -h >>${SSH_LOG}

echo >>${SSH_LOG}

if [ $RC -ne "0" ]; then
    echo "------ error ------" >>${SSH_LOG}
else
    echo "------ no error found during RMAN backup peroid------" >>${SSH_LOG}
    rm -rf ${RMAN_FILE}.log
fi

#Remove old backup than 3 days
#============================================================================
RMDIR=${RMAN_DIR}/`/bin/date +%Y%m%d -d "3 days ago"`;   export RMDIR
echo >>${SSH_LOG}
echo -e "------Remove old backup than 3 days ------\n" >>${SSH_LOG}

if test -d ${RMDIR}
    then
    rm -rf ${RMDIR}
    RC=$?
fi

echo >>${SSH_LOG}

if [ $RC -ne "0" ]; then
    echo -e "------ Remove old backup exception------ \n" >>${SSH_LOG}
else
    echo -e "------ no error found during remove old backup set peroid------ \n" >>${SSH_LOG}
fi

exit

[email protected]
:~/robinson/scripts/dba_scripts/custom/sql> ./db_bak_rman.sh GOBO1 0 RMAN> RMAN> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15> 16> 17> 18> 19> 20> 21> 22> 23> 24> RMAN> RMAN> [email protected]:~/robinson/scripts/dba_scripts/custom/sql>
[email protected]
:/u02/database/GOBO1/backup/rman> ls 20120928 log [email protected]:/u02/database/GOBO1/backup/rman/20120928> ls cntl_lev0.bak GOBO1_lev0_201209281421_arc_4onmb9ro_1_1 GOBO1_lev0_201209281421_4knmb9jn_1_1 GOBO1_lev0_201209281421_c-733951103-20120928-00 GOBO1_lev0_201209281421_4lnmb9jn_1_1 GOBO1_lev0_201209281421_c-733951103-20120928-01 GOBO1_lev0_201209281421_arc_4nnmb9rn_1_1

更多參考: 

基於用管理的備份備份請參

RMAN的備份復與管理請參

ORACLE體系結構請參

相關推薦

linux RMAN備份shell指令碼

       RMAN備份對於Oracle資料庫的備份與恢復簡單易用,成本低廉。對於使用非catalog方式而言,將RMAN指令碼嵌入到shell指令碼,然後再通過crontab來實現中小型資料庫資料庫備份無疑是首選。本文提供了一個簡單易用的基於linux shell下的RM

Linux MySQL資料庫備份shell指令碼

我們部署的伺服器常用是Linux系統。於是,為了保障資料安全,需要每隔一段時間,就對MySQL資料庫的資料進行備份。MySQL下的mysqldump命令,能讓我們有效的對想要的資料庫或者表進行備份。但由於這個操作具有間隔性和重複性,我們不可能每次手動去執行mysqldump命令來進行資料

linux效能監控shell指令碼實現系列一(伺服器整體效能監控)

在實現監控指令碼前,我們先了解下一些已經成型的監控程式,比如大名鼎鼎的nmon。 nmon官網 http://nmon.sourceforge.net/pmwiki.php nmon使用簡單說明 http://www.ibm.com/developerworks/cn/ai

linux如何編寫shell指令碼_2012-12-21

           因為我的同事cwl有事情請假兩天,所以需要我直接和lenovo進行交涉,我需要些一個簡單的測試程式,這裡用到了編寫shell指令碼,實現兩個c程式的編譯。我對shell指令碼的認識,除了執行過同事寫的shell 指令碼外,其他一無所知,為了讓自己強大

LINUX如何寫SHELL指令碼

至於SHELL的概念,什麼是SHELL我就不多說了,網上很多,我倒覺得具體怎麼寫,我沒發現,我把我寫的過程告訴大家:  1:建立一個檔案 touch wt 2:編輯檔案內容,寫入程式碼 #!/bin/sh echo "hello world!" 備註: 第一行是必須的,制定執

LinuxOracle資料庫自動備份Shell指令碼

1.在伺服器建立備份目錄,並賦予許可權 mkdir -p /backup/P_DATA  #新建shell指令碼存放路徑 mkdir -p /backup/P_DB_BACK  #新建Oracle資料庫備份目錄 chown -R oracle:oinstall /backup/P

RACRMAN備份的一些問題 - RMAN指令碼分配通道連線不同的節點

最近RAC下的一個備份指令碼,在分配通道的時候,發現不同的通道連線到了不同的節點上。這樣也存在一些弊端,比如備份檔案是分散在兩個不同的節點上的。 而且備份資料不是均勻分佈的。主要還是看美每個通道都備份了那些表空間等等 --兩個節點上的目錄路徑都一樣,比如都有/rmanbackup這

關於linux定時任務與shell指令碼——實現遠端資料庫備份

一、常用的命令如下:1、編輯一個新的crontab任務    crontab -e2、檢視編寫後的crontab任務    crontab -l3、重啟contab任務服務    service crond restart4、檢視contab任務狀態    service c

windows 生成的shell指令碼linux執行

由於部分命令不支援win系統環境,為了折衷,將部分程式碼在win系統下執行生成資料檔案以及shell指令碼,然後將其上傳到ubuntu10.04上執行指令碼處理。          但是當將shell指令碼上傳到ubuntu後,執行起來就出現了錯誤,不能得到正確的中間資料檔

Linux命令列與shell指令碼(20)--例項:備份檔案

建立一個配置檔案,該檔案包含了要備份的每個目錄或檔案 $ cat files_backup_config /Users/chenhong/Desktop/shell_workspace/my

MYSQL Linux自動備份並刪除7天前的舊備份 sh指令碼

# 資料庫使用者名稱 username=root # 資料庫密碼 password=******** # 需要備份的資料庫名 database=wbwy # 備份檔案到哪個路徑 path="/data"

Linux 常用的Shell 命令

input int AR sel https 如果 del grep option 英文原文鏈接:https://www.lopezferrando.com/30-interesting-shell-commands/ 1. 監控命令(每2秒運行一次) watch

Linux的簡易shell實現

Linux系統的shell作為作業系統的外殼,為使用者提供使用作業系統的介面。 它是命令語言、命令解釋程式及程式設計語言的統稱。 相當於bash的一個子程序,父程序等待,子程序進行程式替換。 shell充當一個橋樑:將使用者的命令翻譯給核心(kernel)處理;同時,將核心的

Linux命令列與shell指令碼程式設計大全(二)

十一、處理使用者輸入 命令列引數 讀取引數: $0是程式名,$1是第一個引數,$2是第二個引數,以此類推,直到第9個引數$9。當引數個數超過10以後,需要在變數數字周圍加上花括號,如${10},如果輸入到命令列的引數是字串且含有空格,需要使用引號。 #! /bin/bash echo

Linux命令列與shell指令碼程式設計大全(一)

一、基本 bash shell命令 建立檔案 : touch 連結檔案:符號連結:是一個實實在在的檔案,兩個通過符號連結在一起的檔案,彼此的內容並不相同。使用ln -s命令。 硬連結:會建立獨立的虛擬檔案,其中包含了原始檔案的資訊及位置。但他們從根本上而言是同一個檔案。原始檔案必須事

Linux命令列與shell指令碼程式設計大全(三)

十二、呈現資料 輸入和輸出     標準檔案描述符                  0 STDIN 標準輸入   &n

Linux命令列與shell指令碼程式設計大全》讀書筆記————第三章 基本的bash shell命令

本章內容 1、使用shell 2、bash手冊 3、瀏覽檔案系統 4、檔案和目錄列表 5、管理檔案和目錄 6、檢視檔案內容   3.3 bash手冊 命令: man  xterm  作用:檢視檢視xterm使用者手冊 man命

Linux命令列與shell指令碼程式設計大全》讀書筆記————第一章 初識Linux shell

本章內容 1、什麼是Linux 2、Linux核心的組成   1、1 什麼是Linux Linux課劃分為以下四部分 a)Linux核心 b)GNU工具 c)圖形化桌面環境 d)應用軟體   1.1.1 深入探究Linux核心

Linux定時備份文件與ssc平臺出租

mtime 刪除 date fin 保存 命令 exec 一個 打包 一、 編寫腳本編寫一個腳本文件,ssc平臺出租《企鵝21717 93408》使腳本可以執行備份命令。?例如,將文件目錄 /home/backups/balalala 備份到/home目錄下,並壓縮。

mysql備份shell指令碼

#!/bin/sh # 備份保留時間 7天 BTIME=7 # 檔名 DATENAME=`date "+%Y-%m-%d_%H_%M"` # 備份目錄 _DIR="/data/" # 資料庫資訊 USER="root" PWD="123456" DATABASE="test" # 備份並