一、摘要
Oracle 的備份與恢複有三種标準的模式,大緻分為兩大類,備份恢複(實體上的)以及導入導出(邏輯上的),
而備份恢複又可以根據資料庫的工作模式分為非歸檔模式 (Nonarchivelog-style)和歸檔模式(Archivelog-style),
通常,我們把非歸檔模式稱為冷備份,而相應的把歸檔模式稱 為熱備份。
邏輯備份 - 冷備份
利用Export可将資料從資料庫中提取出來,利用Import則可将提取出來的資料送回到Oracle資料庫中去。
實體備份 - 冷備份
冷備份資料庫是将資料庫關閉之後備份所有的關鍵性檔案包括資料檔案、控制檔案、聯機REDO LOG檔案,将其拷貝到另外的位置。
此外冷備份也可以包含對參數檔案和密碼檔案的備份,但是這兩種備份是可以根據需要進行選擇的。
冷備份實際也是一種實體備份,是一個備份資料庫實體檔案的過程。
因為冷備份要備份除了重做日志以外的所有資料庫檔案,是以也被成為完全的資料庫備份。
實體備份 - 熱備份
熱備份是在資料庫運作的情況下,采用archive log mode方式備份資料庫的方法。
熱備份要求資料庫處于archive log模式下操作,并需要大量的檔案空間。
一旦資料庫處于archive log模式,就可以進行備份了,當執行備份時,隻能在資料檔案級或表空間進行。
備份方式分類
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCM581dvRWYoNHLwEzX5xCMx8FesU2cfdGLwATMfRHLGZkRGZkRfJ3bs92YskmNhVTYykVNQJVMRhXVEF1X0hXZ0xiNx8VZ6l2cssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLjNTZzETZmNjZ3UWOjdzNyITYhRTYlhjZ2EWZlVTY1kzLcJjMvwVMwgTMwIzLcd2bsJ2LcNXZnFWbp9CXt92Yu8GdjFTNuITavw1LcpDc0RHaiojIsJye.png)
二、邏輯備份
現在先來介紹一下邏輯備份方式的方法,利用Export可将資料從資料庫中提取出來,利用Import則可将提取出來的資料送回到Oracle資料庫中去。
理論基礎:Oracle提供的Export和Import具有三種不同的操作方式(就是備份的資料輸出(入)類型):
(1). 表方式(T) 可以将指定的表導出備份;
(2). 全庫方式(Full) 将資料庫中的所有對象導出;
(3). 使用者方式(U) 可以将指定的使用者相應的所有資料對象導出;
在導入導出備份方式中,提供了很強大的一種方法,就是增量導出/導入,但是它必須作為System來完成增量的導入導出,而且隻能是對整個資料庫進行實施。
增量導出又可以分為三種類别:
(1). 完全增量導出(Complete Export) 這種方式将把整個資料庫檔案導出備份;
exp system/密碼@資料庫名 inctype=complete file=存放目錄\yyyymmdd.dmp (為了友善檢索和事後的查詢,通常我們将備份檔案以日期或者其他有明确含義的字元命名)
(2). 增量型增量導出(Incremental Export) 這種方式将隻會備份上一次備份後改變的結果;
exp system/密碼@資料庫名 inctype=incremental file=存放目錄\yyyymmdd.dmp
(3). 累積型增量導出(Cumulate Export) 這種方式的話,是導出自上次完全增量導出後資料庫變化的資訊;
exp system/密碼@資料庫名 inctype=cumulative file=存放目錄\yyyymmdd.dmp
通常情況下,DBA們所要做的,就是按照企業指定或者是自己習慣的标準(如果是自己指定的标準,建議寫好計劃說明),
一般,我們采用普遍認可的下面的方式進行每天的增量備份:
Mon:完全備份(A)
Tue:增量導出(B)
Wed:增量導出(C)
Thu:增量導出(D)
Fri:累計導出(E)
Sat:增量導出(F)
Sun:增量導出(G)
這樣,我們可以保證每周資料的完整性,以及恢複時的快捷和最大限度的資料損失。
恢複的時候,假設事故發生在周末,DBA可按這樣的步驟來恢複資料庫:
第一步:用指令CREATE DATABASE重新生成資料庫結構;
第二步:建立一個足夠大的附加復原。
第三步:完全增量導入A:
imp system/密碼@資料庫名 inctype=RESTORE FULL=Y FILE=A
第四步:累計增量導入E:
imp system/密碼@資料庫名 inctype=RESTORE FULL=Y FILE=E
第五步:最近增量導入F:
imp system/密碼@資料庫名 inctype=RESTORE FULL=Y FILE=F
通常情況下,DBA所要做的導入導出備份就算完成,隻要科學的按照規律作出備份,就可以将資料的損失降低到最小,提供更可靠的服務。
另外,DBA最好對每次的備份做一個比較詳細的說明文檔,使得資料庫的恢複更加可靠。
三、冷備份
冷備份在資料庫出現問題是 隻會恢複到備份時的那一時間點,備份完成到資料庫出現問題需要恢複時的這一時間段内的所有新資料、修改記錄都無法恢複。
熱備份隻能在歸檔模式下進行,冷備份不需要歸檔模式,歸檔模式會對系統性能尤其是磁盤I/O造成一定的影響,但是相對于歸檔的好處和安全性,相信大多數DBA都會選擇歸檔模式。
1、優點:
隻需拷貝檔案即可,是非常快速的備份方法。
隻需将檔案再拷貝回去,就可以恢複到某一時間點上。
與資料庫歸檔的模式相結合可以使資料庫很好地恢複。
維護量較少,但安全性确相對較高。
2、缺點:
在進行資料庫冷備份的過程中資料庫必須處于關閉狀态。
單獨使用冷備份時,資料庫隻能完成基于某一時間點上的恢複。
若磁盤空間有限,冷備份隻能将備份資料拷貝到錄音帶等其他外部存儲上,速度會更慢。
冷備份不能按表或按使用者恢複。
3.基本流程
當資料庫可以暫時處于關閉狀态時,我們需要将它在這一穩定時刻的資料相關檔案轉移到安全的區域,
當資料庫遭到破壞,再從安全區域将備份的資料庫相關檔案拷貝回原來的位置,
這樣,就完成了一次快捷安全等資料轉移。
由于是在資料庫不提供服務的關閉狀态,是以稱為冷備份。
冷備份具有很多優良特性,比如上面圖中我們提到的,快速,友善,以及高效。一次完整的冷備份步驟應該是:
Step1. 首先關閉資料庫(shutdown normal)
Step2. 拷貝相關檔案到安全區域(利用作業系統指令拷貝資料庫的所有的資料檔案、日志檔案、控制檔案、參數檔案、密碼檔案等(包括路徑))
Step3. 重新啟動資料庫(startup),以上的步驟我們可以用一個腳本來完成操作:
su – oracle < sqlplus /nolog
connect / as sysdba
shutdown immediate;
!cp 檔案備份位置(所有的日志、資料、控制及參數檔案);
startup;
exit;
Step4. 這樣,我們就完成了一次冷備份,請确定你對這些相應的目錄(包括寫入的目标檔案夾)有相應的權限。
Step5. 恢複的時候,相對比較簡單了,我們停掉資料庫,将檔案拷貝回相應位置,重新開機資料庫就可以了,當然也可以用腳本來完成。
四、熱備份
熱備份支援在資料庫不停機的情況下進行備份,冷備份是必須在資料庫shutdown以後使用作業系統的指令對表空間進行拷貝進行的備份。
熱備份适用于重要的資料庫,比如7x24不能中斷的生産系統,同時可以保證資料庫在出現崩潰時結合歸檔日志可以恢複到任意一個時間點,不會造成資料丢失。
可在表空間或資料檔案級備份,備份時間短。
可達到秒級恢複(恢複到某一時間點上)。
可對幾乎所有資料庫實體作恢複。
恢複是快速的,在大多數情況下在資料庫仍工作時恢複。
備份時資料庫仍可用。
因難以維護,是以要特别仔細小心,不允許“以失敗而告終”。
若熱備份不成功,所得結果不可用于時間點的恢複。
不能出錯,否則後果嚴重。
當我們需要做一個精度比較高的備份,而且我們的資料庫不可能停掉(少許通路量)時,
這個情況下,我們就需要歸檔方式下的備份,就是下面讨論的熱備份。
熱備份可以非常精确的備份表空間級和使用者級的資料,由于它是根據歸檔日志的時間軸來備份恢複的,理論上可以恢複到前一個操作,甚至就是前一秒的操作。具體步驟如下:
Step1. 通過視圖v$database,檢視資料庫是否在Archive模式下: SQL> select log_mode from v$database;
如果不是Archive模式
則設定資料庫運作于歸檔模式下:SQL>shutdown immediate
SQL>startup mount
SQL> alter database archivelog;
SQL> alter database open;
如果Automaticarchival顯示為“Enabled”,則資料庫歸檔方式為自動歸檔。否則需要手工歸檔,或者将歸檔方式修改為自動歸檔,如:
正常shutdown資料庫,在參數檔案中init.ora中加入如下參數
SQL>shutdown immediate
修改init.ora:
LOG_ARCHIVE_START=TRUE
LOG_ARCHIVE_DEST1=ORACLE_HOME/admin/o816/arch(歸檔日值存放位置可以自己定義)
SQL>startup
然後,重新啟動資料庫,此時Oracle資料庫将以自動歸檔的方式工作在Archive模式下。
其中參數LOG_ARCHIVE_DEST1是指定的歸檔日志檔案的路徑,建議與Oracle資料庫檔案存在不同的硬碟,一方面減少磁盤I/O競争,另外一方面也可以避免資料庫檔案所在硬碟毀壞之後的檔案丢失。
歸檔路徑也可以直接指定為錄音帶等其它實體儲存設備,但可能要考慮讀寫速度、可寫條件和性能等因素。
注意:當資料庫處在ARCHIVE模式下時,一定要保證指定的歸檔路徑可寫,否則資料庫就會挂起,直到能夠歸檔所有歸檔資訊後才可以使用。
另外,為建立一個有效的備份,當資料庫在建立時,必須履行一個全資料庫的冷備份,就是說資料庫需要運作在歸檔方式,然後正常關閉資料庫,備份所有的資料庫組成檔案。
這一備份是整個備份的基礎,因為該備份提供了一個所有資料庫檔案的拷貝。(展現了冷備份與熱備份的合作關系,以及強大的能力)
Step2. 備份表空間檔案:
(1). 首先,修改表空間檔案為備份模式 ALTER TABLESPACE tablespace_name BEGIN BACKUP;
(2).然後,拷貝表空間檔案到安全區域 !CP tablespace_name D_PATH;
(3).最後,将表空間的備份模式關閉 ALTER TABLESPACE tablespace_name END BACKUP;
Step3. 對歸檔日志檔案的備份:
停止歸檔程序-->備份歸檔日志檔案-->啟動歸檔程序
如果日志文檔比較多,我們将它們寫入一個檔案成為一個恢複的參考:$ files <code>ls &lt;歸檔檔案路徑&gt;/arch*.dbf</code>;export files
Step4. 備份控制檔案:
SQL> alter database backup controlfile to 'controlfile_back_name(一般用2004-11-20的方式)' reuse;
當然,我們也可以将上面的東東寫為一個腳本,在需要的時候執行就可以了:
腳本範例:
su – oracle < sqlplus /nolog
connect / as sysdba
ALTER TABLESPACE tablespace_name BEGIN BACKUP
!CP tablespace_name D_PATH
ALTER TABLESPACE tablespace_name END BACKUP
alter database backup controlfile to 'controlfile_back_name' reuse;
!files <code>ls &lt;歸檔檔案路徑&gt;/arch*.dbf</code>;export files
熱備份的恢複,對于歸檔方式資料庫的恢複要求不但有有效的日志備份還要求有一個在歸檔方式下作的有效的全庫備份。
歸檔備份在理論上可以無資料丢失,但是對于硬體以及操作人員的要求都比較高。
在我們使用歸檔方式備份的時候,全庫實體備份也是非常重要的。
歸檔方式下資料庫的恢複要求從全備份到失敗點所有的日志都要完好無缺。
恢複步驟:LOG_ARCHIVE_DEST_1
shutdown資料庫。
将全備份的資料檔案放到原來系統的目錄中。
将全備份到失敗點的所有歸檔日志放到參數LOG_ARCHIVE_DEST_1所指定的位置。
利用sqlplus登陸到空執行個體。(connect / as sysdba)
然後 startup mount
set autorecovery on
recover database;
alter database open;
本文轉自whshurk 51CTO部落格,原文連結:http://blog.51cto.com/shurk/2063665,如需轉載請自行聯系原作者