在生產(chǎn)過程中广恢,進(jìn)行數(shù)據(jù)庫定時(shí)備份是很有必要的凯旋,以避免數(shù)據(jù)出現(xiàn)極端情況時(shí)進(jìn)行數(shù)據(jù)恢復(fù)。接下來為大家介紹三個(gè)場景的數(shù)據(jù)備份方法:
windows下使用exp備份遠(yuǎn)程oracle數(shù)據(jù)庫
linux下使用expdp備份遠(yuǎn)程oracle數(shù)據(jù)庫
linux下使用exp備份遠(yuǎn)程oracle數(shù)據(jù)庫
1.windows下使用exp備份遠(yuǎn)程oracle數(shù)據(jù)庫
在windows下進(jìn)行數(shù)據(jù)庫備份是非常簡單的钉迷,安裝完oracle客戶端(本文不詳述)后使用exp命令即可至非。
注:使用exp命令導(dǎo)出數(shù)據(jù)庫有個(gè)問題就是,它不會導(dǎo)出空表糠聪,有兩種辦法來解決這個(gè)問題(不文不詳述)荒椭。
a.導(dǎo)出一份表結(jié)構(gòu),恢復(fù)數(shù)據(jù)后進(jìn)行執(zhí)行
b.執(zhí)行exp前為空表創(chuàng)建sgement
1)編寫腳本
auto_data.bat
rem 配置基礎(chǔ)參數(shù)
set BACKUP_DIR=D:\backup
set ORACLE_USERNAME=NMGQ
set ORACLE_PASSWORD=NMGQ
set ORACLE_IP=172.168.63.111
set ORACLE_DB=orcl
set BACK_OPTION=NMGQ
set RAR_CMD="C:\Program Files (x86)\WinRAR\Rar.exe"
rem 備份名稱設(shè)置
set BACK_NAME=%ORACLE_USERNAME%_%date:0,4%%date:5,2%%date:8,2%%time:0,2%%time:3,2%%time:6,2%
set BACK_FULL_NAME=%BACKUP_DIR%%BACK_NAME%
rem 備份過程
exp %ORACLE_USERNAME%/%ORACLE_PASSWORD%@%ORACLE_IP%/%ORACLE_DB% file=%BACK_FULL_NAME%.dmp owner=%BACK_OPTION% log=%BACK_FULL_NAME%exp.log
rem 壓縮過程
%RAR_CMD% a -df "%BACK_FULL_NAME%back.rar" "%BACK_FULL_NAME%.dmp" "%BACK_FULL_NAME%exp.log"
rem 刪除old備份
forfiles /m *.rar -d -7 /c "cmd /c del /f @path"
編寫完后進(jìn)行運(yùn)行測試舰蟆,會生成一個(gè)壓縮包包含.dmp和.log文件趣惠。
2)在windows配置一個(gè)定時(shí)計(jì)劃即可
不會的話可以網(wǎng)上找一個(gè)教程狸棍,本文不詳述。
定時(shí)計(jì)劃教程
2信卡、linux使用expdp備份遠(yuǎn)程oracle
expdp命令比exp好用隔缀,運(yùn)行在服務(wù)端,速度快傍菇,適合大數(shù)據(jù)量的導(dǎo)出猾瘸,導(dǎo)出命令參數(shù)豐富,能導(dǎo)出空表丢习。
由于expdp只能在服務(wù)端使用牵触,所以使用expdp備份數(shù)據(jù)庫的流程如下:
1)測試在環(huán)境下能不能執(zhí)行expdp命令
expdp
1、創(chuàng)建DIRECTORY
create directory dir_dp as '/home/oracle/test';
create directory dir as '/tmp';
2咐低、授權(quán)
Grant read,write on directory dir_dp to zftang;
--查看目錄及權(quán)限
SELECT privilege, directory_name, DIRECTORY_PATH FROM user_tab_privs t, all_directories d
WHERE t.table_name(+) = d.directory_name ORDER BY 2, 1;
3揽思、執(zhí)行導(dǎo)出
expdp zftang/zftang@fgisdb schemas=zftang directory=dir_dpdumpfile =expdp_test1.dmp logfile=expdp_test1.log;
2)測試sftp能不能正常傳輸文件
命令:sftp 你的遠(yuǎn)程機(jī)器的用戶名@ip
輸出:密碼 輸入你的機(jī)器密碼
命令:put 本地文件位置 遠(yuǎn)程機(jī)器位置
傳輸成功!
以上兩個(gè)測試如果都通過见擦,就證明環(huán)境工具都可以使用钉汗,接下來要解決sftp登錄時(shí)要輸入密碼的情況,這樣使用腳本事很不方便鲤屡。
3)fstp免密登錄
大多對密級要求較高的企業(yè)單位都使用SFTP方式傳輸损痰,但是SFTP傳輸必須輸入密碼,對于通過腳本定時(shí)傳輸文件非常不方便酒来。
信任公鑰(對稱公鑰)方法解決了每次都輸入密碼的問題:使用客戶端生成密鑰鑰對卢未,將公鑰添加到服務(wù)器的信任公鑰表中,即完成了服務(wù)器對客戶端信任的添加堰汉,再次使用SCP或者SFTP則不需要密碼辽社。
SCP和SFTP不用輸入密碼的信任公鑰方法攻略
參照:http://jingyan.baidu.com/article/e5c39bf56245ae39d7603331.html
已測試,完全可用翘鸭,注意目錄權(quán)限問題滴铅。
4)編寫自動備份腳本
#!/bin/bash
source ~/.bash_profile #刷新配置文件
FTPIP=172.168.8.120
DIR=/usr/databackup/
find /home/oracle/ -mtime +5 -name "NMG_all*.dmp" | xargs rm -f #刪除老備份
dmpfile=NMG_all_expdp`date +_%Y%m%d`.dmp
dumplog=NMG_all_expdp`date +_%Y%m%d`.log
#備份過程
expdp NMGQ/NMGQ schemas=\(NMGQ\) DIRECTORY=dir_dp CONTENT=all compression=ALL DUMPFILE=${dmpfile} logfile=${dumplog}
#遠(yuǎn)程傳輸
sftp ftpuser@${FTPIP}<<!
-put /home/oracle/gdkt/${dmpfile} ${DIR}${dmpfile}
-put /home/oracle/gdkt/${dumplog} ${DIR}${dumplog}
bye #退出登錄
配置定時(shí)corntab:
查看定時(shí)任務(wù)配置情況:corntab -l
定時(shí)任務(wù)配置(修改):
命令 :corntab -e
進(jìn)入編輯文件,輸入:0 0 12 * * (每天12點(diǎn)運(yùn)行) 你的sh腳本的位置
例: 0 0 12 * * /usr/gdkt/expdp_auto.sh
保存退出(馬上生效)
查看定時(shí)任務(wù)配置情況:corntab -l
此時(shí)應(yīng)該會有你配置的計(jì)劃了就乓。
執(zhí)行賦權(quán)用戶執(zhí)行*.sh的命名失息,要不然有可能會出現(xiàn)拒絕訪問的錯(cuò)誤。
chmod 777 *.sh
crontab計(jì)劃執(zhí)行情況使用下面的命令查看:
cat /var/spool/mail/root
3档址、linux下使用exp備份遠(yuǎn)程oracle
這種情況與在windows下使用exp備份是差不多的,主要步驟見下:
a.想要在linux下單獨(dú)使用exp命令的話邻梆,需要安裝oracle客戶端守伸,并配置exp/imp命令.參考我的另外一篇文章
b.編寫sh腳本
c.使用crontab配置定時(shí)計(jì)劃,上面有說明
主要說下腳本的編寫浦妄,例子見下
#!/bin/bash
source ~/.bashrc #刷新環(huán)境變量
DIR=/usr/gdkt/databackup/data #設(shè)置存放路徑
find ${DIR} -mtime +30 -name "NMG_all_exp*.dmp" | xargs rm -f #刪除多備份尼摹,刪除30天以外的備份
#設(shè)置變量
zipfile=NMG_all_exp`date +_%Y%m%d%H%M%S`.zip
dmpfile=NMG_all_exp`date +_%Y%m%d%H%M%S`.dmp
dumplog=NMG_all_exp`date +_%Y%m%d%H%M%S`.log
#備份過程
exp NMGQ/NMGQ@172.168.63.111/orcl file=${DIR}/${dmpfile} owner=NMGQ,NMG_GXSJK,NMG_SPGT,SDE log=${DIR}/${dumplog}
#壓縮過程
zip -r ${zipfile} ${DIR}/${dmpfile} ${DIR}/${dumplog}
#刪除壓縮后的文件
rm -f ${DIR}/${dmpfile} ${DIR}/${dumplog}