相信為數不少的系統管理員每天都在做著同一樣的工作——對數據進行備份
一旦哪一天疏忽了
而這一天系統又恰恰發生了故障
需要進行數據恢復
那麼此時就無能為力了
假如每天設定一個固定的時間
系統自動進行備份
那該多好啊!下面筆者結合實踐經驗
談一談UNIX環境下Oracle數據庫的自動備份
以起到拋磚引玉的作用
我們計劃讓數據庫在晚上
點做export導出備份
在凌晨
點將備份文件拷貝到磁帶上
在凌晨
點將備份文件拷貝到另一台UNIX機器上
為此我們可進行如下操作
一導出數據庫 export命令將數據庫中的數據備份成一個二進制文件
它通常有三種模式
用戶模式
表模式和整個數據庫模式
本文擬采用用戶模式
備份之前
應先建立一個備份目錄
以容納備份文件
比如可建一個/backup目錄
接著我們可在UNIX的Oracle目錄下(也可以是其它目錄)分別建立兩個文件ora—backup
tar—backup
需要說明的是
前一個文件需要對Oracle的參數進行初始化
為了方便起見
我們不妨將初始化命令放到一個文件中(文件名姑且定為ora—env)
再由第一個文件調用它
ora—env文件對Oracle的參數進行初始化
其內容如下
ORACLE—HOME=$ORACLE—HOME;export ORACLE—HOME
ORACLE—SID=ora
;export ORACLE—SID
ORACLE—TERM=sun;export ORACLE—TERM
LD—LIBRARY—PATH=$ORACLE—HOME/lib;export LD—LIBRARY—PATH
ORA—NLS
=$ORACLE—HOME/ocommon/nls/admin/data;export ORA—NLS
PATH=
:/usr/ccs/bin:/usr/ucb:$ORACLE—HOME/bin:$PATH;export PATH
DISPLAY=host
:
;export DISPLAY
NLS—LANG=american—america
zhs
cgb
;export NLS—LANG
ora—backup文件對數據庫做export導出
導出的文件名可以任意定
本文定為字母
xx
加當天日期
即假如當天日期是
月
號
則導出的文件名為
xx
dmp
以區別於其它日期的備份文件
ora—backup文件內容
/oracle/ora—env
#初始化Oracle數據庫
rq=′date +″%m%d″ ′
#把當天日期賦予變量rq
rm /backup/
# 清空 /backup目錄
exp test/test file=/backup/xx$rq
dmp log=/backup/xx$rq
log
本命令用於在$提示符下
導出test用戶的數據(其口令亦為test)
導出文件及日志均放在/backup目錄下
二磁帶備份 tar—backup文件將用export命令導出的數據文件拷貝到磁帶上
tar—backup文件內容
tar rvf /dev/rmt/
n/backup/
本命令可將/backup目錄下當天產生的文件備份到磁帶上
本文件中
tar命令使用了三個參數
其中r選項表示向磁帶上拷入文件而不破壞磁帶原來內容
v選項表示在拷貝過程中顯示文件信息
f選項後面加上磁帶設備名
指定文件向何處拷貝
n選項表示磁帶機不倒帶
/dev/rmt/
表示UNIX主機第一個磁帶驅動器
同理
/dev/rmt/
則表示UNIX主機第二個磁帶驅動器
依此類推
ora—env
ora—backup
tar—backup文件編寫完成後
分別使用下述命令
chmod
ora—env
chmod
ora—backup
chmod
tar—backup
這樣
三個文件就都變成了可執行文件
三異地備份 我們知道
通常可用FTP命令在兩台主機間傳輸數據
但一般是通過交互方式實現的
即需要手工輸入目標主機的IP地址
用戶名
口令等
顯然
這不符合自動備份的要求
所幸的是
我們可以通過編寫一rc的文件來達到目標
這一文件必須命名rc
且必須存放在啟動FTP命令的機器上的用戶注冊目錄中
該文件的權限應禁止組內或其它用戶進行讀訪問
這樣
當用戶使用FTP命令的時候
系統將會在該用戶的注冊目錄中尋rc文件
如果能夠尋找到
將會首先執行該文件
否則
會交互式地提示用戶輸入用戶名
口令等
在使用FTP命令之前
應先在另一台作備份用的UNIX機器上建一目錄
以容納備份文件
本文建的目錄是/pub
需要指出的是
為了加快備份速度
兩台主機之間的傳輸速率應盡可能的高
最好位於同一局域網上
rc文件內容如下
machine host
# host
為作備份用的主機名
login oracle
#oracle為備份主機上的一個用戶
password oracle
#oracle用戶的口令為oracle
macdef init
#定義一個名為init的宏
它將在自動注冊進程的最後被執行
bin
#文件的傳輸方式設為二進制
lcd /backup
# 進入本地工作目錄/backup
cd /pub
# 進入備份主機目錄/pub
mput
# 將/backup目錄下的所有文件傳輸至備份主機
bye
#退出FTP會話進程
rc文件編寫完成後
使用下述命令
chmod rc
這樣rc文件就只能被該用戶所訪問
四啟動備份進程 Cron是一個永久進程
它由/etc/rc
local啟動執行
Cron檢查/var/spool/cron/crontabs/目錄中的文件
找到所要執行的任務和執行任務的時間
Crontab文件的每一行由六個域(minutes
hours
day of month
month
day of week
command)組成
域之間用空格或Tab分開
其中
minutes
分鐘域
值的范圍是
到
hours
小時域
值的范圍是
到
day of month
日期
值的范圍是
到
month
月份
值的范圍是
到
day of week
星期
值的范圍是
到
星期日值為
command
所要運行的命令
如果一個域是
表明命令可以在該域所有可能的取值范圍內執行
如果一個域是由連字符隔開的兩個數字
表明命令可以在兩個數字之間的范圍內執行(包括兩個數字本身)
如果一個域是由逗號隔開的一系列值組成的
表明命令可以在這些值組成的范圍內執行
如果日期域和星期域都有值
則這兩個域都有效
現在
我們編寫一個文件
用以啟動自動備份進程
值得注意的是
該文件只能在Oracle用戶名下用crontab -e 命令來編輯
否則將不會被定時執行
文件名定為Oracle
文件將放在/var/spool/cron/crontabs 目錄下
編輯完成後
可以在Oracle的$提示符下
用crontab -l命令來查看
Oracle文件內容
/oracle/ora—backup
# 每天
點對數據庫執行備份
/oracle/tar—backup
# 每天
點將文件備份到磁帶上
ftp -i host
# 每天
點將文件備份到另一台主機上
經過以上的操作後
系統每天晚上將自動產生一個備份
並且自動將備份文件分別拷貝到磁帶上和另一台主機上
系統管理員需要做的是
隔幾天換一盤磁帶(更換磁帶的周期取決於備份文件的大小和磁帶的容量)和清理備份目錄
這樣
他們就可以從備份數據的繁瑣中解脫出來
去做其它更有意義的工作
而數據庫既實現了磁帶備份
又實現了異地備份
相應的安全性也大大提高了
From:http://tw.wingwit.com/Article/program/Oracle/201311/18204.html