自動備份數據庫到Windows
本例中IP地址如下
應用服務器:192.168.7.246(Windows Server 2012)
數據庫服務器:192.168.7.243(Centos7)
一、expdp導出
1、Centos7掛載Windows目錄
(1)system用戶登錄plsql
create directory backdir as '/home/backup';
--修改目錄 create or replace directory backdir as '/home/backup/';
--刪除目錄 drop directory backdir;
(2)查看管理員目錄,檢查是否存在
select * from dba_directories;

(3)用管理員給導出用戶賦予在該目錄的操作權限(以sourcedata為例)
grant read,write on directory backdir to sourcedata;
(4)應用服務器上建立備份目錄

(5)共享此目錄

(6)root用戶登錄數據庫服務器創建備份目錄
# mkdir /home/backup

(7)數據庫服務器掛載應用服務器備份目錄
查看oracle的uid和gid
# id oracle

掛載目錄
# mount -t cifs -o username=administrator,password=tP123456@,uid=1001,gid=1002 //192.168.7.246/backup /home/backup

(8)查詢是否掛載成功

(9)設置開機自動掛載
# vim /etc/fatab
加入以下內容:
//192.168.7.246/backup /home/backup cifs username=administrator,password=tP123456@,uid=1001,gid=1002 0 0
(10)查詢目錄所屬用戶(此時backup的用戶會由root變為oracle)

(11)測試數據泵方式備份是否成功
expdp sourcedata/passwd111@192.168.7.243/orcl directory=backdir dumpfile=test.dmp logfile=test.log tables=sourcedata.clinic_visit

2、編寫自動備份腳本
方式一、Centos7執行腳本
(1)編寫oracle_bak.sh腳本
# vim /home/backup/oracle_bak.sh
內容如下:
#!/bin/sh
export PATH
export ORACLE_SID=orcl
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1/
export PATH=$ORACLE_HOME/bin:$PATH
export LANG=C
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
date_now=$(date +%Y%m%d) #獲取當前時間
days=7 #設置刪除7天前備份文件
bak_dir=/home/backup #備份實際存放路徑,backdir 為directory中定義路徑
dmpname=tp_data
schname=sourcedata #備份的用戶,英文逗號分隔
expdp system/orcl@192.168.7.243/orcl directory=backdir schemas=$schname dumpfile=$dmpname_$date_now.dmp logfile=$dmpname_$date_now.log compression=all #執行備份指定數據庫
find $bak_dir -type f -name "*.dmp" -mtime +$days -exec rm -rf {} \;
find $bak_dir -type f -name "*.log" -mtime +$days -exec rm -rf {} \;

(2)授權
# chmod +x /home/backup/oracle_bak.sh


(3)利用crontab定時執行任務
crontab -e,進入定時任務編輯界面
0 22 * * * /home/backup/oracle_bak.sh #每天晚上10點執行
0 22 * * 6 /home/backup/oracle_bak.sh #每周六晚上10點執行
查看crontab:crontab -l
編輯crontab:crontab -e
刪除crontab:crontab -r
啟動:systemctl start crond.service
停止:systemctl stop crond.service
重啟:systemctl restart crond.service
(4)把crontab設置成開機自啟
# vim /etc/rc.d/rc.local
加入以下內容:
systemctl start crond.service

(5)注意事項
數據同時備份在windows和centos上,要注意兩個服務器上備份空間大小,避免空間過小備份失敗。

方式二、Windows執行腳本
(1)編寫oracle_bak.bat腳本
內容如下:
@echo off
::設置變量
::獲取日期
set date_now=%date:~0,4%%date:~5,2%%date:~8,2%
::備份文件路徑
set bak_dir=D:\backup
::備份dmp文件名前綴
set dmpname=tp_data_
::要備份的數據庫ip
set host=192.168.84.132
::要備份的數據庫實例
set dbname=orcl
::要備份的數據庫登錄名
set user=system
::要備份的數據庫登錄密碼
set passwd=orcl
::備份用戶
set schname=sourcedata
::備份文件保存天數
set days=7
expdp %user%/%passwd%@%host%/%dbname% directory=backdir dumpfile=%bak_dir%\%dmpname%%date_now%.dmp logfile=%bak_dir%\%dmpname%%date_now%.log schemas=%schname% compression=all
::刪除7天前的備份
forfiles /p "%bak_dir%" /s /m *.log /d -%days% /c "cmd /c del @path"
forfiles /p "%bak_dir%" /s /m *.dmp /d -%days% /c "cmd /c del @path"
@echo on
exit

(2)將oracle_bak.bat添加到winodws計划任務






二、impdp導入
以還原sourcedata.clinic_visit為例
impdp system/orcl@192.168.7.243/orcl directory=backdir dumpfile=test.dmp logfile=impdp_test.log tables=sourcedata.clinic_visit
三、exp導出
只需修改導出方式為exp,具體參考exp命令
四、exp導出
只需修改導入方式為imp,具體參考imp命令
