備份表空間並上傳磁帶庫的指令碼
#!/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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle磁帶備份模擬Oracle
- MySQL 遷移表空間,備份單表MySql
- 資料庫備份指令碼資料庫指令碼
- SYSTEM 表空間管理及備份恢復
- [20210527]rman與undo表空間備份.txt
- MySQL資料庫備份的shell指令碼MySql資料庫指令碼
- 查詢表空間使用情況的指令碼指令碼
- 備份指令碼指令碼
- MySQL:Windows下分庫備份指令碼MySqlWindows指令碼
- Liunx備份mysql資料庫的shell指令碼MySql資料庫指令碼
- windows下使用mysqldump備份資料庫並上傳到阿里雲OSSWindowsMySql資料庫阿里
- 定時備份 MySQL 並上傳到七牛MySql
- oracle資料庫使用rman備份指令碼Oracle資料庫指令碼
- rman 備份指令碼指令碼
- mysql備份指令碼MySql指令碼
- ORACLE備份指令碼Oracle指令碼
- Oracle 建立表空間和使用者指令碼Oracle指令碼
- MySQL 傳輸表空間MySql
- Shell多執行緒備份資料庫的指令碼執行緒資料庫指令碼
- 複製建立已有資料庫使用者、表空間、許可權的指令碼資料庫指令碼
- 自動備份指令碼指令碼
- windows mysqldump備份指令碼WindowsMySql指令碼
- 分享Oracle Rman的備份指令碼Oracle指令碼
- Oracle RMAN備份為什麼會大量使用temp表空間?Oracle
- mysql容器的定時備份指令碼,有二種方法,備份好後打包傳送到遠端備份主機MySql指令碼
- Mysqldump備份說明及資料庫備份指令碼分享-運維筆記MySql資料庫指令碼運維筆記
- KOSQL Server2019資料庫備份與還原指令碼(批量備份)zrbSQLServer資料庫指令碼
- SQL Server2019資料庫備份與還原指令碼,資料庫可批量備份SQLServer資料庫指令碼
- 自動定時備份 mysql 資料庫 的 shell 指令碼MySql資料庫指令碼
- 12c – 使用跨平臺增量備份來減少傳輸表空間的停機時間 (文件 ID 2102859.1)
- 12c – 使用跨平臺增量備份來減少傳輸表空間的停機時間 (Doc ID 2102859.1)
- QQ 空間備份神器,一鍵備份你所有的青春!
- win10備份空間不足怎麼辦_win10備份空間不足如何處理Win10
- mysql之 表空間傳輸MySql
- expdp 邏輯備份指令碼指令碼
- 兩套mysql備份指令碼MySql指令碼
- 檢查備份情況的指令碼指令碼
- Oracle 12C RMAN備份佔用大量臨時表空間Oracle
- PostgreSQL:表空間-->資料庫-->表SQL資料庫