Oracle數(shù)據(jù)庫定時備份腳本方式(Linux)
說明
腳本共分兩部分,一是主機腳本,二是備機腳本。主機上做備份,傳到備機上,備份文件做壓縮,備機上解壓縮備份文件并自動導庫。
如果有導庫需求,導庫時由于原庫中前一天導入的數(shù)據(jù)存在,如果不全量刪除就進行全量導入此時會有報錯所以建議備機腳本中導庫前先全量刪除一次(會有不同情況,要參考實際情況來操作)。如果沒有導庫需求則可以忽略,將腳本中導庫部分刪除或注釋掉都可以。
Oracle數(shù)據(jù)庫導入dmp文件時,要注意先在備庫中創(chuàng)建原庫相同的用戶(權(quán)限相同、名字相同)、表空間
Linux下直接執(zhí)行導庫命令即可,Windows下要進入DOS窗口(cmd)中執(zhí)行命令
主機腳本
#這里采用 數(shù)據(jù)庫名稱_bak.sh 來命名,為了區(qū)分備份的具體數(shù)據(jù)庫
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
echo "begin export boss dmp file..."
#設置環(huán)境變量
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=FSDB #SID
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LANG=en_US.UTF-8
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
date=$(date +%Y%m%d) #當前時間
days=10 #設置刪除10天前的數(shù)據(jù)
orsid='7.0.8.148:1521/FSDB' #要備份的Oracle數(shù)據(jù)庫IP、端口、SID
orowner=boss #要備份的數(shù)據(jù)庫的用戶名
bakuser=boss #使用此用戶來導出dmp
bakpass=bs #用戶密碼
bakdir=/home/oraclebak #備份文件路徑
bakdata=$orowner"_"$date.dmp #備份的dmp名稱
baklog=$orowner"_"$date.log #備份時產(chǎn)生的log名稱
ordatabak=$orowner"_"$date.tar.gz #將備份的dmp和log壓縮后的文件名稱
cd $bakdir
mkdir -p $orowner
cd $orowner
#導出dmp和log文件
exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$orowner/$bakdata log=$bakdir/$orowner/$baklog
tar -zcvf $ordatabak $bakdata $baklog #壓縮dmp和log文件
scp /home/oraclebak/boss/$orowner"_"$date.tar.gz 7.0.8.149:/home/oraclebak #將備份文件傳到備份服務器上
find $bakdir/$orowner -type f -name "*.log" -exec rm {} \; #刪除log文件
find $bakdir/$orowner -type f -name "*.dmp" -exec rm {} \; #刪除dmp文件
find $bakdir/$orowner -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \; #刪除10天前備份文件
注意:
#在操作系統(tǒng)中執(zhí)行 echo $ORACLE_HOME,即可查看ORACLE_HOME路徑 #在操作系統(tǒng)中執(zhí)行 echo $ORACLE_BASE,即可查看ORACLE_BASE路徑 #這個目前存在問題,如果如以上刪除一天前的備份文件,實際上會保留兩天的備份文件,而有時候數(shù)據(jù)庫服務器#空間有限,所以要添加一個定時刪除備份文件的腳本,才能做到只保留一個備份文件。
備機上自動導庫腳本
#這里采用 數(shù)據(jù)庫名稱_bak.sh 來命名,為了區(qū)分備份的具體數(shù)據(jù)庫
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
echo "begin import boss dmp file..."
#設置環(huán)境變量
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=FSDB #SID
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LANG=en_US.UTF-8
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
date=$(date +%Y%m%d) #當前時間
bakdir=/home/oraclebak #備份文件路徑
days=10 #設置刪除10天前的數(shù)據(jù)
cd $bakdir
tar -zxvf boss"_"$date.tar.gz
imp boss/bs file=$bakdir/boss_$date.dmp log=$bakdir/bossimp_$date.log grants=no ignore=y full=y
echo "imp success!"
find $bakdir -type f -name "*.log" -mtime +$days -exec rm {} \; #刪除10天前l(fā)og文件
find $bakdir -type f -name "*.dmp" -mtime +$days -exec rm {} \; #刪除10天前dmp文件
find $bakdir -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \; #刪除10天前備份文件
注:主機和備機最好配置無密傳輸,腳本寫好后加入定時任務。最好驗證一下兩臺機器之間傳輸是否正常。腳本內(nèi)容按照實際情況做修改。
整個自動備份oracle數(shù)據(jù)庫的過程(建議全程用root用戶)
1、創(chuàng)建一個目錄用于存放腳本。
2、給腳本授權(quán),至少要有執(zhí)行權(quán)限。
3、添加定時任務
[root@localhost /]# crontab -e #插入下面語句(每天凌晨一點備份一次) 00 1 * * * /腳本絕對路徑/腳本名稱 [root@localhost ~]# crontab -l
4、配置主備機之間的無密傳輸
(1)使用Xsell以root用戶連接連接數(shù)據(jù)庫服務器(主機)執(zhí)行命令: ssh-keygen -t rsa,一路回車,進入 /root/.ssh ,可以看到 id_rsa 和 id_rsa_pub 兩個文件,做如下操作:
[root@localhost ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): #一直回車 [root@localhost .ssh]# cd /root/.ssh [root@localhost .ssh]# ll total 8 -rw------- 1 root root 1675 May 21 11:31 id_rsa -rw-r--r-- 1 root root 408 May 21 11:31 id_rsa.pub [root@localhost .ssh]# cp id_rsa.pub id_rsa.pub.dbbak #備份出一份來使用
(2)在遠程服務器(備機)上執(zhí)行命令
[root@localhost ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): #一直回車
(3)在數(shù)據(jù)庫服務器(主機)上執(zhí)行命令
[root@localhost .ssh]# scp ./id_rsa.pub.dbbak 服務器B_IP:/root/.ssh The authenticity of host '16.22.33.158(16.22.33.158)' can't be established. RSA key fingerprint is 62:a9:ar:77:04:b5:42:qd:13:6d:a8:44:b5:8b:23:5a. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '16.22.33.158' (RSA) to the list of known hosts. root@16.22.33.158's password: id_rsa.pub.dbbak 100% 408 0.4KB/s 00:00
(4)在遠程服務器(備機)上執(zhí)行命令
[root@localhost ~]# cd /root/.ssh/ [root@localhost .ssh]# cat id_rsa.pub.dbbak >> authorized_keys
(5)在數(shù)據(jù)庫服務器(主機)上執(zhí)行id_rsa.pub.dbbak腳本,測試無密傳輸是否成功
[root@localhost .ssh]# scp ./id_rsa.pub.dbbak 服務器B_IP:/root/.ssh id_rsa.pub.dbbak 100% 408 0.4KB/s 00:00
謹慎起見,最好仔細測試腳本是否每天自動跑并且有效(觀察2-3天)。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Oracle數(shù)據(jù)庫如何創(chuàng)建第一張表
這篇文章主要介紹了Oracle數(shù)據(jù)庫如何創(chuàng)建第一張表,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09
oracle數(shù)據(jù)庫添加或刪除一列的sql語句
需要注意的一點,如果要修改的表,不是當前的用戶的表,那么就需要添加上用戶的名稱。以及有修改此表的權(quán)限2012-05-05
Redhat 6.2 下 oracle 11g R2的安裝詳解
這篇文章主要介紹了Redhat 6.2 下 oracle 11g R2的安裝詳解,需要的朋友可以參考下2016-07-07
Oracle在表中有數(shù)據(jù)的情況下修改字段類型或長度的解決方法
這篇文章主要介紹了Oracle在表中有數(shù)據(jù)的情況下修改字段類型或長度,修改其某個字段的類型或改變他的長度,由于表中有數(shù)據(jù),不能直接修改,需要換個方法,接下來通過本文給大家介紹下解決方法,需要的朋友可以參考下2022-10-10
Oracle數(shù)據(jù)加載和卸載的實現(xiàn)方法
這篇文章主要介紹了Oracle數(shù)據(jù)加載和卸載的實現(xiàn)方法,非常不錯,具有一定的參考借鑒加載,需要的朋友可以參考下2018-08-08

