備份表空間並上傳磁帶庫的指令碼
#!/bin/sh
#應用Oracle使用者的環境變數
. /oracle/.profile
#指定程式安裝路徑
PDIR="/bkda2/expdump/bin/backup/month"
#刪除歷史資料程式路徑
DDIR="/bkda2/expdump/bin/drop_his"
#********************
# 程式初始化
#********************
#當前年
YY=`date +%Y`
#當前月
MM=`date +%m`
#切換到指令碼所在目錄
cd $PDIR
echo "nnn" >./log/backup.log 1>&1
echo "Initializing....n===================================" >>./log/backup.log 1>&1
#輸入需要備份的表空間名
#echo "Enter TablespaceName:c"
#read SPACE_NAME
SPACE_NAME=$1
#輸入執行壓縮的使用者名稱/密碼
#echo "Enter Username/Password:c"
#read USERPASS
USERPASS=$2
#判斷表空間名是否輸入
if [ "$SPACE_NAME" = "" ]; then
echo "n**Error!** You did not enter TablespaceName" >>./log/backup.log 1>&1
ps -ef | grep "backup.sh" | grep -v grep | awk '{print $2}' | xargs -i kill -9 {}
fi
#判斷表使用者名稱/密碼是否輸入
if [ "$SPACE_NAME" = "" ]; then
echo "n**Error!** You did not enter Username/Password" >>./log/backup.log 1>&1
ps -ef | grep "backup.sh" | grep -v grep | awk '{print $2}' | xargs -i kill -9 {}
fi
#匹配待壓縮資料月份
if [ "$MM" = "01" ]; then
MONTH=$(($YY-1))"10"
elif [ "$MM" = "02" ]; then
MONTH=$(($YY-1))"11"
elif [ "$MM" = "03" ]; then
MONTH=$(($YY-1))"12"
elif [ "$MM" = "04" ]; then
MONTH=$YY"01"
elif [ "$MM" = "05" ]; then
MONTH=$YY"02"
elif [ "$MM" = "06" ]; then
MONTH=$YY"03"
elif [ "$MM" = "07" ]; then
MONTH=$YY"04"
elif [ "$MM" = "08" ]; then
MONTH=$YY"05"
elif [ "$MM" = "09" ]; then
MONTH=$YY"06"
elif [ "$MM" = "10" ]; then
MONTH=$YY"07"
elif [ "$MM" = "11" ]; then
MONTH=$YY"08"
elif [ "$MM" = "12" ]; then
MONTH=$YY"09"
fi
echo "nOK!" >>./log/backup.log 1>&1
#*************************
# 獲取並檢查備份物件
#*************************
echo "nnn" >>./log/backup.log 1>&1
echo "Checking to back up the objectn===================================" >>./log/backup.log 1>&1
#判斷表空間並從資料庫中獲取待備份物件列表
if [ "$SPACE_NAME" = "TBS_DW_01" ]; then
sed "s/Month1/$MONTH/g" ./sql/dw01 > ./sql/dw01.sql
sqlplus $USERPASS @./sql/dw01.sql > /dev/null
DIR="/bkda2/expdump/exp_log/DW/"
elif [ "$SPACE_NAME" = "TBS_DW_02" ]; then
sed "s/Month1/$MONTH/g" ./sql/dw02 > ./sql/dw02.sql
sqlplus $USERPASS @./sql/dw02.sql /dev/null
DIR="/bkda2/expdump/exp_log/DW/"
elif [ "$SPACE_NAME" = "TBS_DW_FT_01" ]; then
sed "s/Month1/$MONTH/g" ./sql/ft01 > ./sql/ft01.sql
sqlplus $USERPASS @./sql/ft01.sql /dev/null
DIR="/bkda2/expdump/exp_log/DW/"
elif [ "$SPACE_NAME" = "TBS_DW_FT_02" ]; then
sed "s/Month1/$MONTH/g" ./sql/ft02 > ./sql/ft02.sql
sqlplus $USERPASS @./sql/ft02.sql > /dev/null
DIR="/bkda2/expdump/exp_log/DW/"
elif [ "$SPACE_NAME" = "TBS_DW_12580" ]; then
sed "s/Month1/$MONTH/g" ./sql/12580 > ./sql/12580.sql
sqlplus $USERPASS @./sql/12580.sql > /dev/null
DIR="/bkda2/expdump/exp_log/DW/"
elif [ "$SPACE_NAME" = "TBS_DW_BASS" ]; then
sed "s/Month1/$MONTH/g" ./sql/bass > ./sql/bass.sql
sqlplus $USERPASS @./sql/bass.sql > /dev/null
DIR="/bkda2/expdump/exp_log/DW/"
elif [ "$SPACE_NAME" = "TBS_DW_NEWS" ]; then
sed "s/Month1/$MONTH/g" ./sql/news > ./sql/news.sql
sqlplus $USERPASS @./sql/news.sql > /dev/null
DIR="/bkda2/expdump/exp_log/DW/"
elif [ "$SPACE_NAME" = "TBS_MK" ]; then
sed "s/Month1/$MONTH/g" ./sql/mk > ./sql/mk.sql
sqlplus $USERPASS @./sql/mk.sql >/dev/null
DIR="/bkda2/expdump/exp_log/MK/"
elif [ "$SPACE_NAME" = "TBS_KR" ]; then
sed "s/Month1/$MONTH/g" ./sql/kr > ./sql/kr.sql
sqlplus $USERPASS @./sql/kr.sql > /dev/null
DIR="/bkda2/expdump/exp_log/KR/"
else
echo "n**Error**! Invalid tablespacename" >>./log/backup.log 1>&1
echo "Available Namelist:" >>./log/backup.log 1>&1
echo "TBS_DW_01 TBS_DW_02 TBS_DW_FT_01 TBS_DW_FT_02 TBS_DW_12580nTBS_DW_BASS TBS_DW_NEWS TBS_MK TBS_KR" >>./log/backup.log 1>&1
ps -ef | grep "backup.sh" | grep -v grep | awk '{print $2}' | xargs -i kill -9 {}
fi
#清除物件列表中的空格,刪除過程檔案
sed 's/ //g' ./object.lst > ./objects
rm ./object.lst
#判斷是否存在需要備份的物件
CATOBJ=`cat ./objects`
if [ "$CATOBJ" = "" ]; then
echo "n**Error!** No object can be backed up" >>./log/backup.log 1>&1
rm ./objects
ps -ef | grep "backup.sh" | grep -v grep | awk '{print $2}' | xargs -i kill -9 {}
fi
echo "nOK!" >>./log/backup.log 1>&1
#*************************
# 開始生成控制檔案
#*************************
echo "nnn" >>./log/backup.log 1>&1
echo "Being create control file....n===================================" >>./log/backup.log 1>&1
#建立控制檔案上部,刪除過程檔案
sed -n '1,1p' objects|sed 's/^V/tables=V/' > ./objects.tmp #修改首行後插入臨時檔案
sed '1d' objects|sed '$d' >> ./objects.tmp #剔除首行和末行並追加到臨時檔案
sed -n '$,$p' objects|sed 's/,$//' >> ./objects.tmp #修改末行後追加到臨時檔案
perl -pe "$/='';s/n//g" objects.tmp > ./$SPACE_NAME"_PART_"$MONTH".ctl" #刪除換行符並插入到控制檔案
sed 's/^tables=//g' objects.tmp | sed 's/^/alter table /g' | sed 's/:/ drop partition /g' | sed 's/,$//g'| sed 's/$/;/g' > $DDIR"/drop_sql/drop_sql.tmp" #生成歷史資料刪除語句
rm ./objects
rm ./objects.tmp
#建立控制檔案下部
echo "ndirectory=exp_dir" >> $SPACE_NAME"_PART_"$MONTH".ctl"
echo "dumpfile="$SPACE_NAME"_PART_"$MONTH".dmp" >> $SPACE_NAME"_PART_"$MONTH".ctl"
echo "job_name="$SPACE_NAME"_PART_"$MONTH >> $SPACE_NAME"_PART_"$MONTH".ctl"
echo "logfile="$SPACE_NAME"_PART_"$MONTH".log" >> $SPACE_NAME"_PART_"$MONTH".ctl"
echo "compression=DATA_ONLY" >> $SPACE_NAME"_PART_"$MONTH".ctl"
echo "nOK!" >>./log/backup.log 1>&1
#***************************
# 開始使用資料泵匯出資料
#***************************
echo "nnn" >>./log/backup.log 1>&1
echo "Being export $SPACE_NAME....n===================================" >> ./log/backup.log 1>&1
expdp $USERPASS parfile=./$SPACE_NAME"_PART_"$MONTH".ctl"
#判斷是否匯出成功
if grep 'successfully completed' /bkda2/expdump/bkdump/$SPACE_NAME"_PART_"$MONTH".log" > /dev/null 2>&1;then
echo "nExpdump_job successfully completed" >>./log/backup.log 1>&1
echo "n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EXPDP LOG ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n" >> ./log/backup.log
cat /bkda2/expdump/bkdump/$SPACE_NAME"_PART_"$MONTH".log" >> ./log/backup.log
echo "n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >> ./log/backup.log
else
echo "n**Error!** Expdump_job failed!" >>./log/backup.log 1>&1
echo "n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EXPDP LOG ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n" >> ./log/backup.log
cat /bkda2/expdump/bkdump/$SPACE_NAME"_PART_"$MONTH".log" >> ./log/backup.log
echo "n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >> ./log/backup.log
ps -ef | grep "backup.sh" | grep -v grep | awk '{print $2}' | xargs -i kill -9 {}
fi
#移動日誌檔案和控制檔案至備份目錄/bkda2/expdump/exp_log/
mv /bkda2/expdump/bkdump/$SPACE_NAME"_PART_"$MONTH".log" $DIR
mv ./$SPACE_NAME"_PART_"$MONTH".ctl" $DIR
echo "nOK!" >>./log/backup.log 1>&1
#************************
# 開始執行歸檔至帶庫
#************************
echo "nnn" >>./log/backup.log 1>&1
echo "NBU Archive Backup beginning....n===================================" >>./log/backup.log 1>&1
echo "nBegin backup "$SPACE_NAME"_PART_"$MONTH".dmp" >>./log/backup.log 1>&1
DUMP_FILE="/bkda2/expdump/bkdump/"$SPACE_NAME"_PART_"$MONTH".dmp"
/usr/openv/netbackup/bin/bparchive $DUMP_FILE
#迴圈判斷是否完成歸檔
until [ ! -f $DUMP_FILE ]
do
sleep 3
done
echo "nOK!" >>./log/backup.log 1>&1
echo "nBackup secsesful" >>./log/backup.log 1>&1
echo "quit" >> $DDIR"/drop_sql/drop_sql.tmp"
mv $DDIR"/drop_sql/drop_sql.tmp" $DDIR"/drop_sql/"$SPACE_NAME"_"$MONTH".sql"
mv "./log/backup.log" "./log/"$SPACE_NAME"_PART_"$MONTH".log"
exit
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7490392/viewspace-1039632/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於表空間的熱備份指令碼指令碼
- 實戰RMAN備份傳輸表空間
- MySQL備份之分庫分表備份指令碼MySql指令碼
- RMAN說,我能備份(3)--RMAN全庫備份和表空間備份
- 表空間級資料庫備份恢復資料庫
- 根據源庫表空間實際使用建立表空間指令碼指令碼
- Oracle磁帶備份模擬Oracle
- 使用Oracle可傳輸表空間的特性複製資料(7)實戰RMAN備份傳輸表空間Oracle
- DB2 使用表空間備份恢復庫DB2
- 移動表空間的指令碼指令碼
- RMAN使用備份傳輸表空間的各種自定義操作
- MySQL 遷移表空間,備份單表MySql
- HPUX系統備份到磁帶UX
- [DB2]線上備份資料庫與表空間DB2資料庫
- mysql按表備份指令碼MySql指令碼
- SAP備份資料庫到磁帶 brtools+netwoker+ADIC帶庫資料庫
- Linux ftp 自動上傳備份檔案指令碼LinuxFTP指令碼
- 資料庫備份指令碼資料庫指令碼
- RMAN全庫備份指令碼指令碼
- 監控oracle表空間指令碼Oracle指令碼
- 指令碼建立表空間、使用者、表指令碼
- 備份主備庫都能用的指令碼(zt)指令碼
- oracle監控表空間,JOB,rman備份Oracle
- Oracle12c多租戶資料庫備份與恢復 - 備份表空間Oracle資料庫
- hp-unix 自帶磁帶機備份資料
- 資料庫全備份指令碼資料庫指令碼
- 分析表空間空閒率並收縮表空間
- 刪除控制檔案中的磁帶備份資訊
- 透過rman備份system系統表空間
- mysql無備份恢復-獨立表空間MySql
- 定時備份 MySQL 並上傳到七牛MySql
- MySQL資料庫備份的shell指令碼MySql資料庫指令碼
- 簡單的備份資料庫指令碼資料庫指令碼
- 查詢表空間使用情況的指令碼指令碼
- 有關表空間查詢的sql指令碼SQL指令碼
- 【物理熱備】(下)備份恢復系統表空間 手工備份恢復
- rman備份指令碼 傳送郵件通知指令碼
- 利用tar向磁帶備份恢復檔案