Oracle數(shù)據(jù)庫(kù)的備份方法
1、引言
Oracle數(shù)據(jù)庫(kù)的備份方法很多,無(wú)論使用那種備份方法,備份的目的都是為了在出現(xiàn)故障后能夠以盡可能小的時(shí)間和代價(jià)恢復(fù)系統(tǒng)。比如使用export實(shí)用程序?qū)С鰯?shù)據(jù)庫(kù)對(duì)象、使用Oracle備份數(shù)據(jù)庫(kù)、使用Oracle對(duì)稱復(fù)制、使用Oracle并行服務(wù)器、使用Oracle冷備份、使用Oracle熱備份等各種備份方法都有其優(yōu)缺點(diǎn)、適用的場(chǎng)合和相應(yīng)的軟硬件要求。本文主要就用export實(shí)用程序?qū)С鰯?shù)據(jù)庫(kù)對(duì)象、Oracle冷備份、Oracle熱備份這三種最基本的備份方法進(jìn)行詳細(xì)的探討,分析各自的優(yōu)缺點(diǎn)和適用的場(chǎng)合,并給出自動(dòng)執(zhí)行這些備份方案的腳本文件。
2、三種備份方案的比較
冷備份
冷備份是Oracle最簡(jiǎn)單的一種備份;執(zhí)行冷備份前必須關(guān)閉數(shù)據(jù)庫(kù);然后使用操作系統(tǒng)實(shí)用工具或者第三方工具備份所有相關(guān)的數(shù)據(jù)庫(kù)文件。
優(yōu)點(diǎn):能簡(jiǎn)單快速地備份。能簡(jiǎn)單快速地恢復(fù)。執(zhí)行簡(jiǎn)單。
缺點(diǎn):必須關(guān)閉數(shù)據(jù)庫(kù),不能進(jìn)行點(diǎn)恢復(fù)。
熱備份
熱備份是當(dāng)數(shù)據(jù)庫(kù)正在運(yùn)行時(shí)進(jìn)行數(shù)據(jù)備份的過(guò)程。執(zhí)行熱備份的前提是:數(shù)據(jù)庫(kù)運(yùn)行在可歸檔日志模式。適用于24X7不間斷運(yùn)行的關(guān)鍵應(yīng)用系統(tǒng)。
優(yōu)點(diǎn):備份時(shí)數(shù)據(jù)庫(kù)可以是打開的。熱備份可以用來(lái)進(jìn)行點(diǎn)恢復(fù)。初始化參數(shù)文件、歸檔日志在數(shù)據(jù)庫(kù)正常運(yùn)行時(shí)是關(guān)閉的,可用操作系統(tǒng)命令拷貝。
缺點(diǎn):執(zhí)行過(guò)程復(fù)雜。由于數(shù)據(jù)庫(kù)不間斷運(yùn)行,測(cè)試比較困難。不能用操作系統(tǒng)實(shí)用工具拷貝打開的文件。必須使用Oracle提供的ocopy工具來(lái)拷貝打開的文件。熱備份可能造成CPU、I/O過(guò)載,應(yīng)在數(shù)據(jù)庫(kù)不太忙時(shí)進(jìn)行。
Export導(dǎo)出數(shù)據(jù)庫(kù)對(duì)象
冷備份和熱備份都備份物理數(shù)據(jù)庫(kù)文件,因而被稱為物理備份。而export備份的是數(shù)據(jù)庫(kù)對(duì)象,因此被稱為邏輯備份。
優(yōu)點(diǎn):能執(zhí)行對(duì)象或者行恢復(fù)。備份和恢復(fù)速度更快。能夠跨操作系統(tǒng)平臺(tái)遷移數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)可一直運(yùn)行。
缺點(diǎn):export并不是冷備份和熱備份的替代工具。冷、熱備份可保護(hù)介質(zhì)失效。export備份可保護(hù)用戶或應(yīng)用錯(cuò)誤。
3、冷備份方案的實(shí)施
3.1 冷備份數(shù)據(jù)庫(kù)的步驟
(1)關(guān)閉數(shù)據(jù)庫(kù);
(2)備份所有相關(guān)的數(shù)據(jù)庫(kù)文件:初始化參數(shù)文件、控制文件(可用select name from v$controlfile;列出所有
控制文件)、數(shù)據(jù)文件(可用select name from v$datafile;列出所有數(shù)據(jù)文件)、Redo日志(可用select member from v$logfile;列出所有redo日志文件)、歸檔的Redo日志(可用select sequence#,first_time from v$loghist;列出所有歸檔redo日志文件的順序號(hào)和產(chǎn)生時(shí)間)。
3.2 冷備份數(shù)據(jù)庫(kù)的腳本文件coldbackup.bat
4、熱備份方案的實(shí)施
4.1 熱備份數(shù)據(jù)庫(kù)的前提條件:數(shù)據(jù)庫(kù)運(yùn)行在歸檔模式
Oracle數(shù)據(jù)庫(kù)的redo日志記錄在數(shù)據(jù)庫(kù)上進(jìn)行的所有活動(dòng)。LGWR后臺(tái)進(jìn)程以一種循環(huán)方式寫這些日志文件,從第一個(gè)redo日志到下一個(gè),直到該組的最后一個(gè),然后由從第一個(gè)日志寫起。
在非歸檔模式下,當(dāng)循環(huán)寫到最后一個(gè)日志文件后,就重寫第一個(gè)日志。因此,非歸檔模式下唯一的數(shù)據(jù)庫(kù)恢復(fù)辦法就是使用冷備份。
在歸檔模式下,當(dāng)redo日志滿時(shí),一個(gè)ARCH后臺(tái)進(jìn)程就讀取全部redo日志,然后將其寫到歸檔日志。因此,可以使用熱備份和點(diǎn)恢復(fù)。在歸檔日志模式下,如果歸檔日志目的空間已滿,數(shù)據(jù)庫(kù)活動(dòng)將暫時(shí)停止,只有釋放一些空間后,數(shù)據(jù)庫(kù)才能繼續(xù)運(yùn)行。通常,background_dump_destination將產(chǎn)生一個(gè)跟蹤文件來(lái)顯示歸檔方面的問(wèn)題。
Oracle數(shù)據(jù)庫(kù)安裝默認(rèn)運(yùn)行在非歸檔模式,通過(guò)以下步驟可以從非歸檔模式轉(zhuǎn)換為歸檔模式:
(1)編輯參數(shù)文件init.ora,設(shè)置以下參數(shù)
# 設(shè)置數(shù)據(jù)庫(kù)自動(dòng)歸檔
log_archive_start = true
# 設(shè)置歸檔日志文件的目錄,該目錄必須事先已建立,并有大量可利用的空間
log_archive_dest_1="location=%oracle_base%\ oradata\%oracle_sid%\archive"
# 設(shè)置歸檔日志文件名的格式。%s表示順序號(hào),%t表示線程號(hào)。
log_archive_format = "%oracle_sid%%T%S.ARC"
(2)在sqlplus上運(yùn)行以下命令
sqlplus>;connect sys/qazwsx as sysdba sqlplus>;shutdown immediate; sqlplus>;startup mount exclusive; sqlplus>;alter database archivelog; sqlplus>;alter database open; sqlplus>;shutdown immediate; |
(3)執(zhí)行數(shù)據(jù)庫(kù)冷備份
當(dāng)數(shù)據(jù)庫(kù)運(yùn)行在歸檔模式下,數(shù)據(jù)庫(kù)恢復(fù)過(guò)程要求使用冷備份時(shí),歸檔日志是必需的。
(4)正常啟動(dòng)數(shù)據(jù)庫(kù),并確認(rèn)數(shù)據(jù)庫(kù)運(yùn)行在歸檔模式
sqlplus >; startup; sqlplus >; select * from v$database; 其log_mode會(huì)顯示數(shù)據(jù)庫(kù)是否歸檔模式 sqlplus >; archive log list; 也會(huì)顯示數(shù)據(jù)庫(kù)是否歸檔模式 |
如果Oracle數(shù)據(jù)庫(kù)運(yùn)行在歸檔模式,當(dāng)進(jìn)行數(shù)據(jù)庫(kù)維護(hù)時(shí),可能需要暫停數(shù)據(jù)庫(kù)的歸檔,在完成維護(hù)后,再重新啟動(dòng)歸檔模式。通過(guò)以下步驟可以從歸檔模式轉(zhuǎn)換為非歸檔模式:
sqlplus>;connect sys/qazwsx as sysdba sqlplus>;shutdown immediate; sqlplus>;startup mount exclusive; sqlplus>;alter database noarchivelog; sqlplus>;alter database open; sqlplus >; select * from v$database; 其log_mode會(huì)顯示數(shù)據(jù)庫(kù)是否歸檔模式 sqlplus >; archive log list; 也會(huì)顯示數(shù)據(jù)庫(kù)是否歸檔模式 |
4.2 熱備份數(shù)據(jù)庫(kù)的步驟
(1)拷貝init.ora文件到備份目錄(參數(shù)文件在數(shù)據(jù)庫(kù)啟動(dòng)后處于關(guān)閉狀態(tài))。
(2)將需要備份的某個(gè)表空間置于開始備份模式。
(3)使用ocopy.exe拷貝表空間,然后將該表空間置于結(jié)束備份模式中(ocopy.exe不能用于直接拷貝聯(lián)機(jī)的數(shù)據(jù)庫(kù)文件)。
(4)對(duì)數(shù)據(jù)庫(kù)中的每個(gè)表空間執(zhí)行步驟2和3(可以通過(guò)視圖dba_tablespaces和v$datafile查看數(shù)據(jù)庫(kù)中有哪些表空間和數(shù)據(jù)文件)。
(5)通過(guò)在sqlplus上執(zhí)行archive log list命令獲取當(dāng)前的日志順序號(hào),從oldest online log sequence開始到current log sequence的聯(lián)機(jī)redo日志應(yīng)該是熱備份的一部分。
(6)在sqlplus上執(zhí)行alter system switch logfile;命令來(lái)強(qiáng)迫日志切換,以便所有的日志都被歸檔。
(7)使用alter database backup controlfile to trace;命令獲得控制文件的一個(gè)備份,可以到%oracle_base%\admin\%oracle_sid%\udump目錄中尋找最新的跟蹤文件,其中有重建控制文件的全部命令。
(8)使用windows nt的命令從%log_archive_dest%中拷貝歸檔的日志文件到備份目錄。
4.3 熱備份數(shù)據(jù)庫(kù)的腳本文件hotbackup.bat
5、使用export作為備份策略
5.1 export的命令選項(xiàng)說(shuō)明
Oracle數(shù)據(jù)庫(kù)的exp工具提供tables、users、full database、tablespace四種級(jí)別的導(dǎo)出方式,把指定的數(shù)據(jù)庫(kù)內(nèi)容導(dǎo)出到一個(gè)或者多個(gè)oracle二進(jìn)制文件中,該文件只允許用imp工具來(lái)讀取,imp的命令選項(xiàng)可用imp help=y來(lái)查閱。
您可以通過(guò)輸入 EXP 命令以及各種自變量來(lái)控制“導(dǎo)出”的運(yùn)行方式。要指定參數(shù),您可以使用關(guān)鍵字:
格式:EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
實(shí)例:EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
或 TABLES=(T11,T12),如果 T1 是分區(qū)表
USERID 必須是命令行中的第一個(gè)參數(shù)。
下列關(guān)鍵字僅用于可傳輸?shù)谋砜臻g
TRANSPORT_TABLESPACE 導(dǎo)出可傳輸?shù)谋砜臻g元數(shù)據(jù) (N)
TABLESPACES 將傳輸?shù)谋砜臻g列表
5.2 export備份數(shù)據(jù)庫(kù)的腳本文件expbackup.bat
6、各種備份策略的自動(dòng)執(zhí)行方法
不管是冷備份、熱備份,還是export備份;不管是unix平臺(tái),還是windows平臺(tái),都可以利用at命令來(lái)定時(shí)、自動(dòng)執(zhí)行上述備份策略。AT 命令安排在特定日期和時(shí)間運(yùn)行命令和程序,在windows nt平臺(tái)上必須首先運(yùn)行調(diào)度服務(wù)(schedule),才能使用at命令。
AT命令用法如下:
AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]]
AT [\\computername] time [/INTERACTIVE]
[ /EVERY:date[,...] | /NEXT:date[,...]] "command"
\\computername 指定遠(yuǎn)程計(jì)算機(jī)。 如果省略這個(gè)參數(shù),會(huì)計(jì)劃在本地計(jì)算機(jī)上運(yùn)行命令。
id 指定給已計(jì)劃命令的識(shí)別號(hào)。
/delete 刪除某個(gè)已計(jì)劃的命令。如果省略 id,計(jì)算機(jī)上所有已計(jì)劃的命令都會(huì)被刪除。
/yes 不需要進(jìn)一步確認(rèn)時(shí),跟刪除所有作業(yè)的命令一起使用。
time 指定運(yùn)行命令的時(shí)間。
/interactive 允許作業(yè)在運(yùn)行時(shí),與當(dāng)時(shí)登錄的用戶桌面進(jìn)行交互。
/every:date[,...] 每個(gè)月或每個(gè)星期在指定的日期運(yùn)行命令。如果省略日期,則默認(rèn)為在每月的本日運(yùn)行。
/next:date[,...] 指定在下一個(gè)指定日期(如下周四)運(yùn)行命令。如果省略日期,則默認(rèn)為在每月的本日運(yùn)行。
"command" 準(zhǔn)備運(yùn)行的 Windows NT 命令或批處理程序。
舉例如下:
(1) 每周五19:00執(zhí)行冷備份
at 19:00 /every:F "coldbak.cmd"
(2) 每周二20:00執(zhí)行熱備份
at 20:00 /every:T "coldbak.cmd"
(3) 每周一、二、三、四、五21:00執(zhí)行export備份
at 20:00 /every:M,T,W,Th,F "expbak.cmd"
posted on 2013-11-15 11:10 順其自然EVO 閱讀(246) 評(píng)論(0) 編輯 收藏 所屬分類: 數(shù)據(jù)庫(kù)