自動備份Oracle資料庫

2021-09-07 23:45:44 字數 4188 閱讀 7111

自動備份oracle資料庫

摘自: 賽迪網

相信為數不少的系統管理員每天都在做著同一樣的工作——對資料進行備份。一旦哪一天疏忽了,而這一天系統又恰恰發生了故障,需要進行資料恢復,那麼此時就無能為力了。假如每天設定乙個固定的時間,系統自動進行備份,那該多好啊!下面筆者結合實踐經驗,談一談unix環境下oracle資料庫的自動備份,以起到拋磚引玉的作用。

我們計畫讓資料庫在晚上23點做export匯出備份,在凌晨2點將備份檔案拷貝到磁帶上,在凌晨4點將備份檔案拷貝到另一台unix機器上,為此我們可進行如下操作:

一、匯出資料庫

export命令將資料庫中的資料備份成乙個二進位制檔案,它通常有三種模式:使用者模式、表模式和整個資料庫模式。本文擬採用使用者模式,備份之前,應先建立乙個備份目錄,以容納備份檔案,比如可建乙個/backup目錄。接著我們可在unix的oracle目錄下(也可以是其它目錄)分別建立兩個檔案ora—backup,tar—backup。需要說明的是,前乙個檔案需要對oracle的引數進行初始化,為了方便起見,我們不妨將初始化命令放到乙個檔案中(檔名姑且定為ora—env),再由第乙個檔案呼叫它。

1. ora—env檔案對oracle的引數進行初始化,其內容如下:

oracle—home=$oracle—home;export oracle—home

oracle—sid=ora73;export oracle—sid

oracle—term=sun;export oracle—term

ld—library—path=$oracle—home/lib;export ld—library—path

ora—nls32=$oracle—home/ocommon/nls/admin/data;export ora—nls

path=.:/usr/ccs/bin:/usr/ucb:$oracle—home/bin:$path;export path

display=host1:0;export display

nls—lang=american—america.zhs16cgb231280;export nls—lang

2. ora—backup檔案對資料庫做export匯出,匯出的檔名可以任意定,本文定為字母「xx」加當天日期,即假如當天日期是12月10號,則匯出的檔名為「xx1210.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/0n/backup/

本命令可將/backup目錄下當天產生的檔案備份到磁帶上。本檔案中,tar命令使用了三個引數,其中r選項表示向磁帶上拷入檔案而不破壞磁帶原來內容,v選項表示在拷貝過程中顯示檔案資訊,f選項後面加上磁帶裝置名,指定檔案向何處拷貝,n選項表示磁帶機不倒帶。/dev/rmt/0表示unix主機第乙個磁帶驅動器,同理,/dev/rmt/1則表示unix主機第二個磁帶驅動器,依此類推。

ora—env、ora—backup、tar—backup檔案編寫完成後,分別使用下述命令:

chmod 755 ora—env

chmod 755 ora—backup

chmod 755 tar—backup

這樣,三個檔案就都變成了可執行檔案。

三、異地備份

我們知道,通常可用ftp命令在兩台主機間傳輸資料,但一般是通過互動方式實現的,即需要手工輸入目標主機的ip位址、使用者名稱、口令等。顯然,這不符合自動備份的要求。所幸的是,我們可以通過編寫乙個.netrc的檔案來達到目標。這一檔案必須命名為.netrc,且必須存放在啟動ftp命令的機器上的使用者註冊目錄中,該檔案的許可權應禁止組內或其它使用者進行讀訪問。這樣,當使用者使用ftp命令的時候,系統將會在該使用者的註冊目錄中尋找.netrc檔案,如果能夠尋找到,將會首先執行該檔案,否則,會互動式地提示使用者輸入使用者名稱、口令等。

在使用ftp命令之前,應先在另一台作備份用的unix機器上建一目錄,以容納備份檔案,本文建的目錄是/pub 。需要指出的是,為了加快備份速度,兩台主機之間的傳輸速率應盡可能的高,最好位於同一區域網上。

.netrc檔案內容如下:

machine host2  

# host2為作備份用的主機名

login oracle  

#oracle為備份主機上的乙個使用者

password oracle  

#oracle使用者的口令為oracle

macdef init    

#定義乙個名為init的巨集,它將在自動註冊程序的最後被執行

bin      

#檔案的傳輸方式設為二進位制

lcd /backup  

# 進入本地工作目錄/backup

cd /pub    

# 進入備份主機目錄/pub

mput     

# 將/backup目錄下的所有檔案傳輸至備份主機

bye      

#退出ftp會話程序

.netrc檔案編寫完成後,使用下述命令:

chmod 600 .netrc

這樣,.netrc檔案就只能被該使用者所訪問。

四、啟動備份程序

cron是乙個永久程序,它由/etc/rc.local啟動執行。cron檢查/var/spool/cron/crontabs/目錄中的檔案,找到所要執行的任務和執行任務的時間。

crontab檔案的每一行由六個域(minutes、hours、day of month、month、day of week、 command)組成,域之間用空格或tab分開,其中:

minutes:分鐘域,值的範圍是0到59

hours:小時域,值的範圍是0到23

day of month:日期,值的範圍是1到31

month:月份,值的範圍是1到12

day of week:星期,值的範圍是0到6,星期日值為0

command:所要執行的命令

如果乙個域是,表明命令可以在該域所有可能的取值範圍內執行。

如果乙個域是由連字元隔開的兩個數字,表明命令可以在兩個數字之間的範圍內執行(包括兩個數字本身)。

如果乙個域是由逗號隔開的一系列值組成的,表明命令可以在這些值組成的範圍內執行。

如果日期域和星期域都有值,則這兩個域都有效。

現在,我們編寫乙個檔案,用以啟動自動備份程序。值得注意的是,該檔案只能在oracle使用者名稱下用crontab -e 命令來編輯,否則將不會被定時執行,檔名定為oracle,檔案將放在/var/spool/cron/crontabs 目錄下。編輯完成後,可以在oracle的$提示符下,用crontab -l命令來檢視。

oracle檔案內容:

0 23    /oracle/ora—backup

# 每天23點對資料庫執行備份

0 2    /oracle/tar—backup

# 每天2點將檔案備份到磁帶上

0 4    ftp -i host2  

# 每天4點將檔案備份到另一台主機上

經過以上的操作後,系統每天晚上將自動產生乙個備份,並且自動將備份檔案分別拷貝到磁帶上和另一台主機上。系統管理員需要做的是,隔幾天換一盤磁帶(更換磁帶的週期取決於備份檔案的大小和磁帶的容量)和清理備份目錄。這樣,他們就可以從備份資料的繁瑣中解脫出來,去做其它更有意義的工作。而資料庫既實現了磁帶備份,又實現了異地備份,相應的安全性也大大提高了。

【最後更新:10/15/2001 07:54:10】

關於本站 │ 聯絡站長 │ 意見、建議 │ 合作 │ 本站地圖 │ 廣告服務

e-mail:

[email protected]

自動備份Oracle資料庫

相信為數不少的系統管理員每天都在做著同一樣的工作 對資料進行備份。一旦哪一天疏忽了,而這一天系統又恰恰發生了故障,需要進行資料恢復,那麼此時就無能為力了。假如每天設定乙個固定的時間,系統自動進行備份,那該多好啊!下面筆者結合實踐經驗,談一談unix環境下oracle資料庫的自動備份,以起到拋磚引玉的...

oracle資料庫自動備份

第一步編寫指令碼 配置oracle的環境變數 必須配置 export oracle base data server oracle export oracle home data server oracle product 12.2.0.1 db 1 export oracle sid les ex...

oracle資料庫自動備份

出bug可以修復,但是資料庫的資料丟失了,那可是莫大損失,所以讓資料庫自動進行備份是非常有必要的。下面的方法是通過win的定時器定時執行bat檔案來備份資料庫 1 新建乙個txt文件,裡面內容如下 放在最後可以複製下來稍微修改一下直 接拿去使用 紅色方框內是資料庫的賬號 密碼 sid,藍色方框內是你...