1. 程式人生 > >oracle用expdp方式備份腳本

oracle用expdp方式備份腳本

ftp服務 source find 服務器 一個 bye 腳本 目錄 st2

需求:備份oracle數據庫並將數據備份的文件上傳到ftp所在服務器
ftp服務器IP地址:192.168.6.9
ftp服務器賬戶/密碼:test/test2018

1、oracle用戶創建備份腳本路徑:

#su - oracle
$ mkdir /u0/app/backup/bin
$ cd /u01/app/backup/bin

2、創建備份腳本:

$ vi /u01/app/backup/bin/bak.sh
#!/bin/sh
source /home/oracle/.bash_profile
timedate=$(date +%Y%m%d%H%M%S)
bakdbname=hb
bakdbpasswd=h1234
dumpbame=hd
bakdbhome=/u01/app/backup
expdp $bakdbname/$bakdbpasswd directory=backDir dumpfile=$dumpbame-$timedate.dmp logfile=$bakdbname-$timedate.log
zip -r $bakdbhome/$dumpbame-$timedate.zip $bakdbhome/$dumpbame-$timedate.dmp $bakdbhome/$bakdbname-$timedate.log      #壓縮dmp文件及日誌文件
find $bakdbhome/*.log -mtime +10 -exec rm -rf {} \;
find $bakdbhome/*.zip -mtime +10 -exec rm -rf {} \; 

cd $bakdbhome   #切換到備份文件目錄下
ftp -v -n 192.168.6.9  << EOF       #執行ftp命令
user test test2018           #用戶名和密碼
binary                     #切換傳輸模式為二進制模式,以字節傳輸(除文字文件外皆用此模式)
hash                       #切換#字號的出現,每一個#字號表示傳送了1024/8192BYTES
put $dumpbame-$timedate.zip $dumpbame-$timedate.zip
bye
EOF

#將日誌文件的GB2312轉為UTF-8編碼,這樣腳本執行的log日誌文件中文不會亂碼
iconv -f gb2312  -t utf8 $bakdbname-$timedate.log  -o $bakdbname-$timedate.log
find $bakdbhome/*.dmp -exec rm -rf {} \;  #前面壓縮後,刪除原dmp文件
FTP的命令行格式為: 
ftp -v -d -i -n -g [主機名] ,其中 
-v 顯示遠程服務器的所有響應信息; 
-n 限制ftp的自動登錄,即不使用;
hash:每傳輸1024字節,顯示一個hash符號(#);
.n etrc文件; 
-d 使用調試方式; 
-g 取消全局文件名;
bye:退出ftp會話過程;
get下傳文件;
mget批量下傳文件,需配合萬用字元,例如:MGET*.GZ;
put上傳文件;
mput批量上傳文件,需配合萬用字元;
recv相當於GET(RECV為RECEIVE的簡寫):
send相當於PUT。

給bak.sh腳本執行權限,做計劃任務即可

$ crontab -l
10 0 * * * /bin/bash /u01/app/backup/bin/bak.sh

oracle用expdp方式備份腳本