linux下進行Oracle自動備份


自動備份數據庫到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命令

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM