天天看點

Oracle資料庫的備份方法

1、引言

  2、三種備份方案的比較

  冷備份

  優點:能簡單快速地備份。能簡單快速地恢複。執行簡單。

  缺點:必須關閉資料庫,不能進行點恢複。

  熱備份

  優點:備份時資料庫可以是打開的。熱備份可以用來進行點恢複。初始化參數檔案、歸檔日志在資料庫正常運作時是關閉的,可用作業系統指令拷貝。

  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=(t11,t12),如果 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"

最新内容請見作者的github頁:http://qaseven.github.io/