posts - 89,  comments - 98,  trackbacks - 0

          二、DB2數(shù)據(jù)庫的恢復(fù)

          DB2數(shù)據(jù)庫提供了三種恢復(fù)類型:

          1、崩潰恢復(fù)(crash recovery):崩潰恢復(fù)是用來在失敗后立即進(jìn)行恢復(fù),把數(shù)據(jù)庫恢復(fù)到一個事務(wù)一致狀態(tài),此狀態(tài)的所有更改只有在執(zhí)行提交事務(wù)后才生效。崩潰恢復(fù)使用命令 RESTART 執(zhí)行。

          2、備份恢復(fù)(restore recovery):備份恢復(fù)可從上一次所作的備份中恢復(fù)數(shù)據(jù)庫的內(nèi)容。備份恢復(fù)使用 RESTORE 命令執(zhí)行。

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

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

          表一 數(shù)據(jù)庫能否進(jìn)行向前恢復(fù)帶來的影響

          如果不允許進(jìn)行向前恢復(fù) 如果允許進(jìn)行向前恢復(fù)

          在發(fā)生失敗后,可以把數(shù)據(jù)庫恢復(fù)到失敗前與最后一次事務(wù)一致的狀態(tài)。

          同樣,也支持恢復(fù)到與最后一次事務(wù)一致的狀態(tài)。

          可以把數(shù)據(jù)庫恢復(fù)到任何有效的備份狀態(tài),但是不能重新執(zhí)行發(fā)生在備份之后的事務(wù)。

          可以把數(shù)據(jù)庫恢復(fù)到任何有效的備份狀態(tài),并且可以重新執(zhí)行從發(fā)生失敗到當(dāng)前為止提交的事務(wù)。

          只能在沒有任何應(yīng)用連接到數(shù)據(jù)庫時進(jìn)行備份(這稱為脫機(jī)備份)。

          可以在應(yīng)用連接到數(shù)據(jù)庫時和事務(wù)正在處理時進(jìn)行備份(這稱為聯(lián)機(jī)備份)。同樣支持脫機(jī)備份。

          每一個備份都必須包含整個數(shù)據(jù)庫的當(dāng)前狀態(tài)。

          一個備份可能包含整個數(shù)據(jù)庫的當(dāng)前狀態(tài),或者是一個或多個表空間。數(shù)據(jù)庫的表空間可以單獨地備份和恢復(fù)。

          可以通過把數(shù)據(jù)庫配置參數(shù) LOGRETAIN 或 USEREXIT 設(shè)置為 YES 來使向前恢復(fù)生效。日志會由于生成新的文件而不斷增加,并且它們是無限制的。在這種情況下,必須采取一些辦法把舊的日志文件保存到文檔中,以防止文件系統(tǒng)被日志占滿。

          1、RESTART 命令

          此命令是當(dāng)一些操作還在處理時發(fā)生斷電或軟件崩潰后要發(fā)出的第一個命令。它建立一個數(shù)據(jù)庫的連接,并使用日志來把數(shù)據(jù)庫恢復(fù)到事務(wù)一致狀態(tài)。所有在失敗發(fā)生前由提交操作所引起的數(shù)據(jù)庫更改都會生效。所有在失敗前被撤消的操作和失敗時正在處理的事務(wù)對數(shù)據(jù)庫進(jìn)行的更改都被撤消。

          下面是 RESTART 命令的例子:

          RESTART DATABASE mydb

          2、RESTORE 命令

          此命令使用存儲在備份中的內(nèi)容來恢復(fù)數(shù)據(jù)庫的內(nèi)容。RESTORE 命令可以創(chuàng)建一個新的數(shù)據(jù)庫。RESTORE 命令需要 SYSADM,SYSCTRLSYSMAINT特權(quán)。RESTORE 命令要使用的備份可能包含整個數(shù)據(jù)庫或一組表空間。恢復(fù)整個數(shù)據(jù)庫必須脫機(jī)進(jìn)行,恢復(fù)表空間可以聯(lián)機(jī)進(jìn)行,也就是在還有應(yīng)用連接到數(shù)據(jù)庫時進(jìn)行。RESTORE 命令語法為:

          RESTORE DB 目標(biāo)數(shù)據(jù)庫別名 [TABLESPACE 表空間名] [FROM 介質(zhì)名] [TAKEN AT 時間]

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

          (1)從一個特定目錄(/backup/mydb)中的備份來恢復(fù) mydb 數(shù)據(jù)庫。如果 mydb 不能夠進(jìn)行向前恢復(fù),數(shù)據(jù)庫將被恢復(fù)到備份時的狀態(tài),而且可以立即使用。如果能夠進(jìn)行向前恢復(fù),數(shù)據(jù)庫會被置為向前掛起(pending)狀態(tài),直到它被執(zhí)行向前恢復(fù)命令之后才能被使用。

          RESTORE DATABASE mydb FROM /backup/mydb

          (2)下面的命令是對數(shù)據(jù)庫 mydb 進(jìn)行恢復(fù),并且在外部指定不進(jìn)行向前恢復(fù),數(shù)據(jù)庫可以被立即使用。

          RESTORE DATABASE mydb FROM /backup/mydb WITHOUT ROLLING FORWARD

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

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

          3、ROLLFORWARD 命令

          ROLLFORWARD 命令是在執(zhí)行了一個 RESTORE 命令之后執(zhí)行的,以便對數(shù)據(jù)庫或它的表空間進(jìn)行向前恢復(fù)。ROLLFORWARD 命令需要SYSADM,SYSCTRLSYSMAINT 特權(quán),并且數(shù)據(jù)庫必須能夠進(jìn)行向前恢復(fù)。

          ROLLFORWARD 命令可以適用于整個數(shù)據(jù)庫或是一個或多個表空間,它們的狀態(tài)此時都是向前掛起(pending)的。如果向前恢復(fù)整個數(shù)據(jù)庫,此過程必須是脫機(jī)的,而且數(shù)據(jù)庫可以被恢復(fù)成備份時間和當(dāng)前時間之中的任何時間段。如果只向前恢復(fù)單獨的表空間,此過程既可以是聯(lián)機(jī)的也可以是脫機(jī)的,但是必須把表空間向前恢復(fù)到當(dāng)前時間后,再重新執(zhí)行所有引起更改的提交操作,這樣可保證被恢復(fù)的表空間和數(shù)據(jù)庫中的其它部分保持一致。ROLLFORWARD 命令語法為:

          ROLLFORWARD DATABASE 數(shù)據(jù)庫名 [TO {時間,END OF LOGS}][TABLESPACE {ONLINE,表空間名}]

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

          (1)此例子使 mydb 數(shù)據(jù)庫恢復(fù)到當(dāng)前時刻。字句 AND STOP 是讓數(shù)據(jù)庫不被置為 ROLLFORWARD PENDING 狀態(tài),并且可以被存取:

          ROLLFORWARD DATABASE mydb TO END OF LOGS AND STOP

          (2)下面的例子向前恢復(fù) mydb 數(shù)據(jù)庫,并重新執(zhí)行在指定日期和時間之前提交的所有事務(wù):

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

          (3)下面的例子只把數(shù)據(jù)庫 mydb 中的某一表空間向前恢復(fù)。此命令是在執(zhí)行了一次表空間級別的恢復(fù)后發(fā)出的,它只適用于被恢復(fù)的表空間。此命令指出向前恢復(fù)是聯(lián)機(jī)進(jìn)行的,并且要進(jìn)行到當(dāng)前時間(日志末尾):

          ROLLFORWARD DATABASE mydb TO END OF LOGS AND STOP TABLESPACE ONLINE

          注:如果數(shù)據(jù)庫中有一些列是 LOB 數(shù)據(jù)類型的,并且它們被創(chuàng)建帶有 NOT LOGGED 選項,那么對這些列進(jìn)行的更新操作就沒有被記錄到日志中,向前恢復(fù)就不會對這些列進(jìn)行操作。如果在向前恢復(fù)過程中,遇到了沒有日志的列,它們的值會被置為十六進(jìn)制的0。

          posted on 2006-09-14 09:40 水煮三國 閱讀(250) 評論(0)  編輯  收藏 所屬分類: Database
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(4)

          隨筆分類(85)

          隨筆檔案(89)

          文章分類(14)

          文章檔案(42)

          收藏夾(37)

          java

          oracle

          Sybase

          搜索

          •  

          積分與排名

          • 積分 - 211651
          • 排名 - 266

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 昔阳县| 新郑市| 隆德县| 滨州市| 华蓥市| 多伦县| 聊城市| 延吉市| 博白县| 南充市| 泾川县| 永济市| 高尔夫| 保定市| 丰镇市| 东乡| 中西区| 鲜城| 龙川县| 宁远县| 七台河市| 河东区| 灵石县| 玛曲县| 灵宝市| 平谷区| 新龙县| 塔河县| 达孜县| 吉首市| 临汾市| 建阳市| 云龙县| 丹阳市| 永城市| 富宁县| 巴林右旗| 荣成市| 娄底市| 清远市| 饶平县|