Oracle備份與恢復(轉)

BSDLite發表於2007-08-11
Oracle備份與恢復(轉)[@more@]Oracle的備份與恢復有三種標準的模式,大致分為兩大類,備份恢復(物理上的)以及匯入匯出(邏輯上的),而備份恢復又可以根據資料庫的工作模式分為非歸檔模式(Nonarchivelog-style)和歸檔模式(Archivelog-style),通常,我們把非歸檔模式稱為冷備份,而相應的把歸檔模式稱為熱備份,三種方式各有優點,我們做個比較(這個是用Fireworks畫的,有點糙):

$A: 現在先來介紹一下邏輯備份方式的方法,利用Export可將資料從資料庫中提取出來,利用Import則可將提取出來的資料送回到Oracle資料庫中去。理論基礎:Oracle提供的Export和Import具有三種不同的操作方式(就是備份的資料輸出(入)型別):

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

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

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

*在匯入匯出備份方式中,提供了很強大的一種方法,就是增量匯出/匯入,但是它必須作為System來完成增量的匯入匯出,而且只能是對整個資料庫進行實施。增量匯出又可以分為三種類別:

1,完全增量匯出(Complete Export) 這種方式將把整個資料庫檔案匯出備份;exp system/manager inctype=complete file=20041125.dmp(為了方便檢索和事後的查詢,通常我們將備份檔案以日期或者其他有明確含義的字元命名)

2,增量型增量匯出(Incremental Export) 這種方式將只會備份上一次備份後改變的結果;exp system/manager inctype=incremental file=20041125.dmp

3,累積型增量匯出(Cumulate Export) 這種方式的話,是匯出自上次完全增量匯出後資料庫變化的資訊。exp system/manager inctype=cumulative file=20041125.dmp

通常情況下,DBA們所要做的,就是按照企業指定或者是自己習慣的標準(如果是自己指定的標準,建議寫好計劃說明),一般,我們採用普遍認可的下面的方式進行每天的增量備份:

Mon: 完全備份(A)
Tue: 增量匯出(B)
Wed:增量匯出(C)
Thu: 增量匯出(D)
Fri: 累計匯出(E)
Sat: 增量匯出(F)
Sun: 增量匯出(G)

這樣,我們可以保證每週資料的完整性,以及恢復時的快捷和最大限度的資料損失。恢復的時候,假設事故發生在週末,DBA可按這樣的步驟來恢復資料庫:
第一步:用命令CREATE DATABASE重新生成資料庫結構;
第二步:建立一個足夠大的附加回滾。
第三步:完全增量匯入A:
imp system/manager inctype=RESTORE FULL=y FILE=A
第四步:累計增量匯入E:
imp system/manager inctype=RESTORE FULL=Y FILE=E
第五步:最近增量匯入F:
imp system/manager inctype=RESTORE FULL=Y FILE=F

通常情況下,DBA所要做的匯入匯出備份就算完成,只要科學的按照規律作出備份,就可以將資料的損失降低到最小,提供更可靠的服務。另外,DBA最好對每次的備份做一個比較詳細的說明文件,使得資料庫的恢復更加可靠。

$B 物理備份之冷備份(條件-NonArchiveLog):

當資料庫可以暫時處於關閉狀態時,我們需要將它在這一穩定時刻的資料相關檔案轉移到安全的區域,當資料庫遭到破壞,再從安全區域將備份的資料庫相關檔案複製回原來的位置,這樣,就完成了一次快捷安全等資料轉移。由於是在資料庫不提供服務的關閉狀態,所以稱為冷備份。冷備份具有很多優良特性,比如上面圖中我們提到的,快速,方便,以及高效。一次完整的冷備份步驟應該是:

1,首先關閉資料庫(shutdown normal)

2,複製相關檔案到安全區域(利用作業系統命令複製資料庫的所有的資料檔案、日誌檔案、控制檔案、引數檔案、口令檔案等(包括路徑))

3,重新啟動資料庫(startup)

以上的步驟我們可以用一個指令碼來完成操作:

su – oracle < sqlplus /nolog
connect / as sysdba
shutdown immediate;
!cp 檔案 備份位置(所有的日誌、資料、控制及引數檔案);
startup;
exit;
這樣,我們就完成了一次冷備份,請確定你對這些相應的目錄(包括寫入的目標資料夾)有相應的許可權。

恢復的時候,相對比較簡單了,我們停掉資料庫,將檔案複製回相應位置,重啟資料庫就可以了,當然也可以用指令碼來完成。

$C 物理備份之熱備份:(條件-ArchiveLog)

當我們需要做一個精度比較高的備份,而且我們的資料庫不可能停掉(少許訪問量)時,這個情況下,我們就需要歸檔方式下的備份,就是下面討論的熱備份。熱備份可以非常精確的備份表空間級和使用者級的資料,由於它是根據歸檔日誌的時間軸來備份恢復的,理論上可以恢復到前一個操作,甚至就是前一秒的操作。具體步驟如下:

1,透過檢視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模式下時,一定要保證指定的歸檔路徑可寫,否則資料庫就會掛起,直到能夠歸檔所有歸檔資訊後才可以使用。另外,為建立一個有效的備份,當資料庫在建立時,必須履行一個全資料庫的冷備份,就是說資料庫需要執行在歸檔方式,然後正常關閉資料庫,備份所有的資料庫組成檔案。這一備份是整個備份的基礎,因為該備份提供了一個所有資料庫檔案的複製。(體現了冷備份與熱備份的合作關係,以及強大的能力)

2,備份表空間檔案:

a,首先,修改表空間檔案為備份模式 ALTER TABLESPACE tablespace_name BEGIN BACKUP;

b,然後,複製表空間檔案到安全區域 !CP tablespace_name D_PATH;

c,最後,將表空間的備份模式關閉 ALTER TABLESPACE tablespace_name END BACKUP;

3,對歸檔日誌檔案的備份:

停止歸檔程式-->備份歸檔日誌檔案-->啟動歸檔程式

如果日誌文件比較多,我們將它們寫入一個檔案成為一個恢復的參考:$ files `ls /arch*.dbf`;export files

4,備份控制檔案:
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(一般用2004-11-20的方式)' 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;

這樣,我們的熱恢復就算完工了,寫了好久,終於寫好,大家有什麼補充就寫上來,不要客氣,這是這兩天學習的一些心得,希望大家多多交流,謝謝

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-946392/,如需轉載,請註明出處,否則將追究法律責任。

相關文章