淺談DB2資料庫的備份與恢復(下) (轉)

worldblog發表於2007-12-04
淺談DB2資料庫的備份與恢復(下) (轉)[@more@]

二、2的恢復

資料庫提供了三種恢復型別:

1、崩潰恢復(crash recovery):崩潰恢復是用來在失敗後立即進行恢復,把資料庫恢復到一個事務一致狀態,此狀態的所有更改只有在提交事務後才生效。崩潰恢復使用命令 RESTART 執行。

2、恢復(restore recovery):備份恢復可從上一次所作的備份中恢復資料庫的內容。備份恢復使用 RESTORE 命令執行。

3、向前恢復(forward recovery):在一個資料庫從備份中恢復了以後,向前恢復可以重新執行那些在備份後才更改了資料庫的操作。在這種情況下,資料庫可以恢復到備份和當前時間之間的任何時間斷。向前恢復使用 ROLLFOR 命令執行。

崩潰恢復和備份恢復對任何資料庫都適用,而向前恢復只有在資料庫被指定可以使用此功能是才使用。表一顯示了此功能帶來的影響。

表一 資料庫能否進行向前恢復帶來的影響

如果不允許進行向前恢復如果允許進行向前恢復

在發生失敗後,可以把資料庫恢復到失敗前與最後一次事務一致的狀態。

同樣,也支援恢復到與最後一次事務一致的狀態。

可以把資料庫恢復到任何有效的備份狀態,但是不能重新執行發生在備份之後的事務。

可以把資料庫恢復到任何有效的備份狀態,並且可以重新執行從發生失敗到當前為止提交的事務。

只能在沒有任何應用連線到資料庫時進行備份(這稱為離線備份)。

可以在應用連線到資料庫時和事務正在處理時進行備份(這稱為聯機備份)。同樣支援離線備份。

每一個備份都必須包含整個資料庫的當前狀態。

一個備份可能包含整個資料庫的當前狀態,或者是一個或多個表空間。資料庫的表空間可以單獨地備份和恢復。

可以透過把資料庫引數 LOGRETAIN 或 USEREXIT 設定為 YES 來使向前恢復生效。日誌會由於生成新的而不斷增加,並且它們是無限制的。在這種情況下,必須採取一些辦法把舊的日誌檔案儲存到文件中,以防止檔案被日誌佔滿。

1、RESTART 命令

此命令是當一些操作還在處理時發生斷電或崩潰後要發出的第一個命令。它建立一個資料庫的連線,並使用日誌來把資料庫恢復到事務一致狀態。所有在失敗發生前由提交操作所引起的資料庫更改都會生效。所有在失敗前被撤消的操作和失敗時正在處理的事務對資料庫進行的更改都被撤消。

下面是 RESTART 命令的例子:

RESTART DATABASE mydb

2、RESTORE 命令

此命令使用在備份中的內容來恢復資料庫的內容。RESTORE 命令可以建立一個新的資料庫。RESTORE 命令需要 SYSADM,SYSCTRLSYSMAINT特權。RESTORE 命令要使用的備份可能包含整個資料庫或一組表空間。恢復整個資料庫必須離線進行,恢復表空間可以聯機進行,也就是在還有應用連線到資料庫時進行。RESTORE 命令語法為:

RESTORE DB 目標資料庫別名 [TABLESPACE 表空間名] [FROM 介質名] [TAKEN AT 時間]

下面是一些 RESTORE 命令的例子:

(1)從一個特定目錄(/backup/mydb)中的備份來恢復 mydb 資料庫。如果 mydb 不能夠進行向前恢復,資料庫將被恢復到備份時的狀態,而且可以立即使用。如果能夠進行向前恢復,資料庫會被置為向前掛起(pending)狀態,直到它被執行向前恢復命令之後才能被使用。

RESTORE DATABASE mydb FROM /backup/mydb

(2)下面的命令是對資料庫 mydb 進行恢復,並且在外部指定不進行向前恢復,資料庫可以被立即使用。

RESTORE DATABASE mydb FROM /backup/mydb WITHOUT ROLLING FORWARD

(3)下面的例子是從一個指定的目錄(/backup/mydb)中來恢復 mydb 資料庫的一個指定的表空間,此恢復要使用指定的日期和時間:

RESTORE DATABASE mydb TABLESPACE ONLINE FROM /backup/mydb TAKEN AT 20000926201226

3、ROLLFORWARD 命令

ROLLFORWARD 命令是在執行了一個 RESTORE 命令之後執行的,以便對資料庫或它的表空間進行向前恢復。ROLLFORWARD 命令需要SYSADM,SYSCTRLSYSMAINT 特權,並且資料庫必須能夠進行向前恢復。

ROLLFORWARD 命令可以適用於整個資料庫或是一個或多個表空間,它們的狀態此時都是向前掛起(pending)的。如果向前恢復整個資料庫,此過程必須是離線的,而且資料庫可以被恢復成備份時間和當前時間之中的任何時間段。如果只向前恢復單獨的表空間,此過程既可以是聯機的也可以是離線的,但是必須把表空間向前恢復到當前時間後,再重新執行所有引起更改的提交操作,這樣可保證被恢復的表空間和資料庫中的其它部分保持一致。ROLLFORWARD 命令語法為:

ROLLFORWARD DATABASE 資料庫名 [TO {時間,END OF LOGS}][TABLESPACE {ONLINE,表空間名}]

下面是一些 ROLLFORWARD 命令的例子:

(1)此例子使 mydb 資料庫恢復到當前時刻。字句 AND STOP 是讓資料庫不被置為 ROLLFORWARD PENDING 狀態,並且可以被存取:

ROLLFORWARD DATABASE mydb TO END OF LOGS AND STOP

(2)下面的例子向前恢復 mydb 資料庫,並重新執行在指定日期和時間之前提交的所有事務:

ROLLFORWARD DATABASE mydb TO 2000-09-26-10.3059 AND STOP

(3)下面的例子只把資料庫 mydb 中的某一表空間向前恢復。此命令是在執行了一次表空間級別的恢復後發出的,它只適用於被恢復的表空間。此命令指出向前恢復是聯機進行的,並且要進行到當前時間(日誌末尾):

ROLLFORWARD DATABASE mydb TO END OF LOGS AND STOP TABLESPACE ONLINE

注:如果資料庫中有一些列是 LOB 資料型別的,並且它們被建立帶有 NOT LOGGED 選項,那麼對這些列進行的操作就沒有被記錄到日誌中,向前恢復就不會對這些列進行操作。如果在向前恢復過程中,遇到了沒有日誌的列,它們的值會被置為十六進位制的0。


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

相關文章