Oracle冷備份和熱備份的處理

技術小胖子發表於2017-11-04

一、摘要

Oracle 的備份與恢復有三種標準的模式,大致分為兩大類,備份恢復(物理上的)以及匯入匯出(邏輯上的),

而備份恢復又可以根據資料庫的工作模式分為非歸檔模式 (Nonarchivelog-style)和歸檔模式(Archivelog-style),

通常,我們把非歸檔模式稱為冷備份,而相應的把歸檔模式稱 為熱備份。

  1. 邏輯備份 – 冷備份

利用Export可將資料從資料庫中提取出來,利用Import則可將提取出來的資料送回到Oracle資料庫中去。

  1. 物理備份 – 冷備份

冷備份資料庫是將資料庫關閉之後備份所有的關鍵性檔案包括資料檔案、控制檔案、聯機REDO LOG檔案,將其拷貝到另外的位置。

此外冷備份也可以包含對引數檔案和口令檔案的備份,但是這兩種備份是可以根據需要進行選擇的。

冷備份實際也是一種物理備份,是一個備份資料庫物理檔案的過程。

因為冷備份要備份除了重做日誌以外的所有資料庫檔案,因此也被成為完全的資料庫備份。

  1. 物理備份 – 熱備份

熱備份是在資料庫執行的情況下,採用archive log mode方式備份資料庫的方法。

熱備份要求資料庫處於archive log模式下操作,並需要大量的檔案空間。

一旦資料庫處於archive log模式,就可以進行備份了,當執行備份時,只能在資料檔案級或表空間進行。

  1. 備份方式分類
    Oracle冷備份和熱備份的處理

    二、邏輯備份

    現在先來介紹一下邏輯備份方式的方法,利用Export可將資料從資料庫中提取出來,利用Import則可將提取出來的資料送回到Oracle資料庫中去。

  2. 理論基礎:Oracle提供的Export和Import具有三種不同的操作方式(就是備份的資料輸出(入)型別):

(1). 表方式(T) 可以將指定的表匯出備份;

(2). 全庫方式(Full) 將資料庫中的所有物件匯出;

(3). 使用者方式(U) 可以將指定的使用者相應的所有資料物件匯出;

  1. 在匯入匯出備份方式中,提供了很強大的一種方法,就是增量匯出/匯入,但是它必須作為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

  1. 通常情況下,DBA們所要做的,就是按照企業指定或者是自己習慣的標準(如果是自己指定的標準,建議寫好計劃說明),

一般,我們採用普遍認可的下面的方式進行每天的增量備份:

Mon:完全備份(A)

Tue:增量匯出(B)

Wed:增量匯出(C)

Thu:增量匯出(D)

Fri:累計匯出(E)

Sat:增量匯出(F)

Sun:增量匯出(G)

  1. 這樣,我們可以保證每週資料的完整性,以及恢復時的快捷和最大限度的資料損失。

恢復的時候,假設事故發生在週末,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以後使用作業系統的命令對錶空間進行拷貝進行的備份。

熱備份適用於重要的資料庫,比如7×24不能中斷的生產系統,同時可以保證資料庫在出現崩潰時結合歸檔日誌可以恢復到任意一個時間點,不會造成資料丟失。

1、優點:

可在表空間或資料檔案級備份,備份時間短。

可達到秒級恢復(恢復到某一時間點上)。

可對幾乎所有資料庫實體作恢復。

恢復是快速的,在大多數情況下在資料庫仍工作時恢復。

備份時資料庫仍可用。

2、缺點:

因難以維護,所以要特別仔細小心,不允許“以失敗而告終”。

若熱備份不成功,所得結果不可用於時間點的恢復。

不能出錯,否則後果嚴重。

3.基本流程

當我們需要做一個精度比較高的備份,而且我們的資料庫不可能停掉(少許訪問量)時,

這個情況下,我們就需要歸檔方式下的備份,就是下面討論的熱備份。

熱備份可以非常精確的備份表空間級和使用者級的資料,由於它是根據歸檔日誌的時間軸來備份恢復的,理論上可以恢復到前一個操作,甚至就是前一秒的操作。具體步驟如下:

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 ls &lt;歸檔檔案路徑&gt;/arch*.dbf;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 ls &lt;歸檔檔案路徑&gt;/arch*.dbf;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,如需轉載請自行聯絡原作者



相關文章