在生產(chǎn)過程中,進行數(shù)據(jù)庫定時備份是很有必要的,以避免數(shù)據(jù)出現(xiàn)極端情況時進行數(shù)據(jù)恢復。接下來為大家介紹三個場景的數(shù)據(jù)備份方法:
windows下使用exp備份遠程oracle數(shù)據(jù)庫
linux下使用expdp備份遠程oracle數(shù)據(jù)庫
linux下使用exp備份遠程oracle數(shù)據(jù)庫
1.windows下使用exp備份遠程oracle數(shù)據(jù)庫
在windows下進行數(shù)據(jù)庫備份是非常簡單的,安裝完oracle客戶端(本文不詳述)后使用exp命令即可。
注:使用exp命令導出數(shù)據(jù)庫有個問題就是,它不會導出空表,有兩種辦法來解決這個問題(不文不詳述)。
a.導出一份表結(jié)構(gòu),恢復數(shù)據(jù)后進行執(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"
編寫完后進行運行測試,會生成一個壓縮包包含.dmp和.log文件。
2)在windows配置一個定時計劃即可
不會的話可以網(wǎng)上找一個教程,本文不詳述。
定時計劃教程
2、linux使用expdp備份遠程oracle
expdp命令比exp好用,運行在服務端,速度快,適合大數(shù)據(jù)量的導出,導出命令參數(shù)豐富,能導出空表。
由于expdp只能在服務端使用,所以使用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í)行導出
expdp zftang/zftang@fgisdb schemas=zftang directory=dir_dpdumpfile =expdp_test1.dmp logfile=expdp_test1.log;
2)測試sftp能不能正常傳輸文件
命令:sftp 你的遠程機器的用戶名@ip
輸出:密碼 輸入你的機器密碼
命令:put 本地文件位置 遠程機器位置
傳輸成功!
以上兩個測試如果都通過,就證明環(huán)境工具都可以使用,接下來要解決sftp登錄時要輸入密碼的情況,這樣使用腳本事很不方便。
3)fstp免密登錄
大多對密級要求較高的企業(yè)單位都使用SFTP方式傳輸,但是SFTP傳輸必須輸入密碼,對于通過腳本定時傳輸文件非常不方便。
信任公鑰(對稱公鑰)方法解決了每次都輸入密碼的問題:使用客戶端生成密鑰鑰對,將公鑰添加到服務器的信任公鑰表中,即完成了服務器對客戶端信任的添加,再次使用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}
#遠程傳輸
sftp ftpuser@${FTPIP}<<!
-put /home/oracle/gdkt/${dmpfile} ${DIR}${dmpfile}
-put /home/oracle/gdkt/${dumplog} ${DIR}${dumplog}
bye #退出登錄
配置定時corntab:
查看定時任務配置情況:corntab -l
定時任務配置(修改):
命令 :corntab -e
進入編輯文件,輸入:0 0 12 * * (每天12點運行) 你的sh腳本的位置
例: 0 0 12 * * /usr/gdkt/expdp_auto.sh
保存退出(馬上生效)
查看定時任務配置情況:corntab -l
此時應該會有你配置的計劃了。
執(zhí)行賦權(quán)用戶執(zhí)行*.sh的命名,要不然有可能會出現(xiàn)拒絕訪問的錯誤。
chmod 777 *.sh
crontab計劃執(zhí)行情況使用下面的命令查看:
cat /var/spool/mail/root
3、linux下使用exp備份遠程oracle
這種情況與在windows下使用exp備份是差不多的,主要步驟見下:
a.想要在linux下單獨使用exp命令的話,需要安裝oracle客戶端,并配置exp/imp命令.參考我的另外一篇文章
b.編寫sh腳本
c.使用crontab配置定時計劃,上面有說明
主要說下腳本的編寫,例子見下
#!/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}