當前位置:開發者網絡 >> 技術教程 >> 數據庫專欄 >> DB2 >> 內容
精彩推薦
分類最新教程
分類熱點教程
    
淺談DB2數據庫的備份與恢復(下)
作者:未知
日期:2005-04-29
人氣:
投稿:(轉貼)
來源:未知
字體:
收藏:加入瀏覽器收藏
以下正文:

二、DB2數據庫的恢復
DB2數據庫提供了三種恢復類型:

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

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

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

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

表一 數據庫能否進行向前恢復帶來的影響
如果不允許進行向前恢復如果允許進行向前恢復
在發生失敗後,可以把數據庫恢復到失敗前與最後一次事務一致的狀態。

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

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

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

只能在沒有任何應用連接到數據庫時進行備份(這稱為脫機備份)。

可以在應用連接到數據庫時和事務正在處理時進行備份(這稱為聯機備份)。同樣支持脫機備份。

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

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

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

1、RESTART 命令

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

下面是 RESTART 命令的例子:

RESTART DATABASE mydb

2、RESTORE 命令

此命令使用存儲在備份中的內容來恢復數據庫的內容。RESTORE 命令可以創建一個新的數據庫。RESTORE 命令需要 SYSADM,SYSCTRL或SYSMAINT特權。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,SYSCTRL 或 SYSMAINT 特權,並且數據庫必須能夠進行向前恢復。

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。
相關文章: