oracle資料庫的備份方法很多,無論使用那種備份方法,備份的目的都是為了在出現故障後能夠以盡可能小的時間和代價恢複系統。比如使用export實用程式導出資料庫對象、使用oracle備份資料庫、使用oracle對稱複制、使用oracle并行伺服器、使用oracle冷備份、使用oracle熱備份等各種備份方法都有其優缺點、适用的場合和相應的軟硬體要求。本文主要就用export實用程式導出資料庫對象、oracle冷備份、oracle熱備份這三種最基本的備份方法進行詳細的探讨,分析各自的優缺點和适用的場合,并給出自動執行這些備份方案的腳本檔案。
2、三種備份方案的比較
冷備份
冷備份是oracle最簡單的一種備份;執行冷備份前必須關閉資料庫;然後使用作業系統實用工具或者第三方工具備份所有相關的資料庫檔案。
優點:能簡單快速地備份。能簡單快速地恢複。執行簡單。
缺點:必須關閉資料庫,不能進行點恢複。
熱備份
熱備份是當資料庫正在運作時進行資料備份的過程。執行熱備份的前提是:資料庫運作在可歸檔日志模式。适用于24x7不間斷運作的關鍵應用系統。
優點:備份時資料庫可以是打開的。熱備份可以用來進行點恢複。初始化參數檔案、歸檔日志在資料庫正常運作時是關閉的,可用作業系統指令拷貝。
缺點:執行過程複雜。由于資料庫不間斷運作,測試比較困難。不能用作業系統實用工具拷貝打開的檔案。必須使用oracle提供的ocopy工具來拷貝打開的檔案。熱備份可能造成cpu、i/o過載,應在資料庫不太忙時進行。
export導出資料庫對象
冷備份和熱備份都備份實體資料庫檔案,因而被稱為實體備份。而export備份的是資料庫對象,是以被稱為邏輯備份。
優點:能執行對象或者行恢複。備份和恢複速度更快。能夠跨作業系統平台遷移資料庫。資料庫可一直運作。
缺點:export并不是冷備份和熱備份的替代工具。冷、熱備份可保護媒體失效。export備份可保護使用者或應用錯誤。
3、冷備份方案的實施
3.1 冷備份資料庫的步驟
(1)關閉資料庫;
(2)備份所有相關的資料庫檔案:初始化參數檔案、控制檔案(可用select name from v$controlfile;列出所有
控制檔案)、資料檔案(可用select name from v$datafile;列出所有資料檔案)、redo日志(可用select member from v$logfile;列出所有redo日志檔案)、歸檔的redo日志(可用select sequence#,first_time from v$loghist;列出所有歸檔redo日志檔案的順序号和産生時間)。
3.2 冷備份資料庫的腳本檔案coldbackup.bat
4、熱備份方案的實施
4.1 熱備份資料庫的前提條件:資料庫運作在歸檔模式
oracle資料庫的redo日志記錄在資料庫上進行的所有活動。lgwr背景程序以一種循環方式寫這些日志檔案,從第一個redo日志到下一個,直到該組的最後一個,然後由從第一個日志寫起。
在非歸檔模式下,當循環寫到最後一個日志檔案後,就重寫第一個日志。是以,非歸檔模式下唯一的資料庫恢複辦法就是使用冷備份。
在歸檔模式下,當redo日志滿時,一個arch背景程序就讀取全部redo日志,然後将其寫到歸檔日志。是以,可以使用熱備份和點恢複。在歸檔日志模式下,如果歸檔日志目的空間已滿,資料庫活動将暫時停止,隻有釋放一些空間後,資料庫才能繼續運作。通常,background_dump_destination将産生一個跟蹤檔案來顯示歸檔方面的問題。
oracle資料庫安裝預設運作在非歸檔模式,通過以下步驟可以從非歸檔模式轉換為歸檔模式:
(1)編輯參數檔案init.ora,設定以下參數
# 設定資料庫自動歸檔
log_archive_start = true
# 設定歸檔日志檔案的目錄,該目錄必須事先已建立,并有大量可利用的空間
log_archive_dest_1="location=%oracle_base%\ oradata\%oracle_sid%\archive"
# 設定歸檔日志檔案名的格式。%s表示順序号,%t表示線程号。
log_archive_format = "%oracle_sid%%t%s.arc"
(2)在sqlplus上運作以下指令
sqlplus>;connect sys/qazwsx as sysdba
sqlplus>;shutdown immediate;
sqlplus>;startup mount exclusive;
sqlplus>;alter database archivelog;
sqlplus>;alter database open;
(3)執行資料庫冷備份
當資料庫運作在歸檔模式下,資料庫恢複過程要求使用冷備份時,歸檔日志是必需的。
(4)正常啟動資料庫,并确認資料庫運作在歸檔模式
sqlplus >; startup;
sqlplus >; select * from v$database; 其log_mode會顯示資料庫是否歸檔模式
sqlplus >; archive log list; 也會顯示資料庫是否歸檔模式
如果oracle資料庫運作在歸檔模式,當進行資料庫維護時,可能需要暫停資料庫的歸檔,在完成維護後,再重新啟動歸檔模式。通過以下步驟可以從歸檔模式轉換為非歸檔模式:
sqlplus>;alter database noarchivelog;
4.2 熱備份資料庫的步驟
(1)拷貝init.ora檔案到備份目錄(參數檔案在資料庫啟動後處于關閉狀态)。
(2)将需要備份的某個表空間置于開始備份模式。
(3)使用ocopy.exe拷貝表空間,然後将該表空間置于結束備份模式中(ocopy.exe不能用于直接拷貝聯機的資料庫檔案)。
(4)對資料庫中的每個表空間執行步驟2和3(可以通過視圖dba_tablespaces和v$datafile檢視資料庫中有哪些表空間和資料檔案)。
(5)通過在sqlplus上執行archive log list指令擷取目前的日志順序号,從oldest online log sequence開始到current log sequence的聯機redo日志應該是熱備份的一部分。
(6)在sqlplus上執行alter system switch logfile;指令來強迫日志切換,以便所有的日志都被歸檔。
(7)使用alter database backup controlfile to trace;指令獲得控制檔案的一個備份,可以到%oracle_base%\admin\%oracle_sid%\udump目錄中尋找最新的跟蹤檔案,其中有重建控制檔案的全部指令。
(8)使用windows nt的指令從%log_archive_dest%中拷貝歸檔的日志檔案到備份目錄。
4.3 熱備份資料庫的腳本檔案hotbackup.bat
5、使用export作為備份政策
5.1 export的指令選項說明
oracle資料庫的exp工具提供tables、users、full database、tablespace四種級别的導出方式,把指定的資料庫内容導出到一個或者多個oracle二進制檔案中,該檔案隻允許用imp工具來讀取,imp的指令選項可用imp help=y來查閱。
您可以通過輸入 exp 指令以及各種自變量來控制“導出”的運作方式。要指定參數,您可以使用關鍵字:
格式:exp keyword=value 或 keyword=(value1,value2,...,valuen)
執行個體:exp scott/tiger grants=y tables=(emp,dept,mgr)
或 tables=(t1
1,t1
2),如果
t1 是分區表
userid 必須是指令行中的第一個參數。
下列關鍵字僅用于可傳輸的表空間
transport_tablespace 導出可傳輸的表空間中繼資料 (n)
tablespaces 将傳輸的表空間清單
5.2 export備份資料庫的腳本檔案expbackup.bat
6、各種備份政策的自動執行方法
不管是冷備份、熱備份,還是export備份;不管是unix平台,還是windows平台,都可以利用at指令來定時、自動執行上述備份政策。at 指令安排在特定日期和時間運作指令和程式,在windows nt平台上必須首先運作排程服務(schedule),才能使用at指令。
at指令用法如下:
at [\\computername] [ [id] [/delete] | /delete [/yes]]
at [\\computername] time [/interactive]
[ /every:date[,...] | /next:date[,...]] "command"
\\computername 指定遠端計算機。 如果省略這個參數,會計劃在本地計算機上運作指令。
id 指定給已計劃指令的識别号。
/delete 删除某個已計劃的指令。如果省略 id,計算機上所有已計劃的指令都會被删除。
/yes 不需要進一步确認時,跟删除所有作業的指令一起使用。
time 指定運作指令的時間。
/interactive 允許作業在運作時,與當時登入的使用者桌面進行互動。
/every:date[,...] 每個月或每個星期在指定的日期運作指令。如果省略日期,則預設為在每月的本日運作。
/next:date[,...] 指定在下一個指定日期(如下周四)運作指令。如果省略日期,則預設為在每月的本日運作。
"command" 準備運作的 windows nt 指令或批處理程式。
舉例如下:
(1) 每周五19:00執行冷備份
at 19:00 /every:f "coldbak.cmd"
(2) 每周二20:00執行熱備份
at 20:00 /every:t "coldbak.cmd"
(3) 每周一、二、三、四、五21:00執行export備份
at 20:00 /every:m,t,w,th,f "expbak.cmd"