Oracle冷備份和熱備份的處理
Oracle 的備份與恢復有三種標準的模式,大致分為兩大類,備份恢復(物理上的)以及導入導出(邏輯上的),
而備份恢復又可以根據數據庫的工作模式分為非歸檔模式 (Nonarchivelog-style)和歸檔模式(Archivelog-style),
通常,我們把非歸檔模式稱為冷備份,而相應的把歸檔模式稱 為熱備份。
- 邏輯備份 - 冷備份
利用Export可將數據從數據庫中提取出來,利用Import則可將提取出來的數據送回到Oracle數據庫中去。
- 物理備份 - 冷備份
冷備份數據庫是將數據庫關閉之後備份所有的關鍵性文件包括數據文件、控制文件、聯機REDO LOG文件,將其拷貝到另外的位置。
此外冷備份也可以包含對參數文件和口令文件的備份,但是這兩種備份是可以根據需要進行選擇的。
冷備份實際也是一種物理備份,是一個備份數據庫物理文件的過程。
因為冷備份要備份除了重做日誌以外的所有數據庫文件,因此也被成為完全的數據庫備份。
- 物理備份 - 熱備份
熱備份是在數據庫運行的情況下,采用archive log mode方式備份數據庫的方法。
熱備份要求數據庫處於archive log模式下操作,並需要大量的檔案空間。
一旦數據庫處於archive log模式,就可以進行備份了,當執行備份時,只能在數據文件級或表空間進行。
-
備份方式分類
二、邏輯備份
現在先來介紹一下邏輯備份方式的方法,利用Export可將數據從數據庫中提取出來,利用Import則可將提取出來的數據送回到Oracle數據庫中去。 - 理論基礎:Oracle提供的Export和Import具有三種不同的操作方式(就是備份的數據輸出(入)類型):
(1). 表方式(T) 可以將指定的表導出備份;
(2). 全庫方式(Full) 將數據庫中的所有對象導出;
(3). 用戶方式(U) 可以將指定的用戶相應的所有數據對象導出;
- 在導入導出備份方式中,提供了很強大的一種方法,就是增量導出/導入,但是它必須作為System來完成增量的導入導出,而且只能是對整個數據庫進行實施。
增量導出又可以分為三種類別:
(1). 完全增量導出(Complete Export) 這種方式將把整個數據庫文件導出備份;
exp system/密碼@數據庫名 inctype=complete file=存放目錄\yyyymmdd.dmp (為了方便檢索和事後的查詢,通常我們將備份文件以日期或者其他有明確含義的字符命名)
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不能中斷的生產系統,同時可以保證數據庫在出現崩潰時結合歸檔日誌可以恢復到任意一個時間點,不會造成數據丟失。
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 <歸檔文件路徑>/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 <歸檔文件路徑>/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;
Oracle冷備份和熱備份的處理