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ù)到一個(gè)事務(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):在一個(gè)數(shù)據(jù)庫從備份中恢復(fù)了以后,向前恢復(fù)可以重新執(zhí)行那些在備份后才更改了數(shù)據(jù)庫的操作。在這種情況下,數(shù)據(jù)庫可以恢復(fù)到備份和當(dāng)前時(shí)間之間的任何時(shí)間斷。向前恢復(fù)使用 ROLLFORWORD 命令執(zhí)行。

          崩潰恢復(fù)和備份恢復(fù)對(duì)任何數(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ù)庫時(shí)進(jìn)行備份(這稱為脫機(jī)備份)。

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

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

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

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

          1、RESTART 命令

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

          下面是 RESTART 命令的例子:

          RESTART DATABASE mydb

          2、RESTORE 命令

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

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

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

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

          RESTORE DATABASE mydb FROM /backup/mydb

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

          RESTORE DATABASE mydb FROM /backup/mydb WITHOUT ROLLING FORWARD

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

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

          3、ROLLFORWARD 命令

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

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

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

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

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

          ROLLFORWARD DATABASE mydb TO END OF LOGS AND STOP

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

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

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

          ROLLFORWARD DATABASE mydb TO END OF LOGS AND STOP TABLESPACE ONLINE

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

          posted on 2006-09-14 09:40 水煮三國(guó) 閱讀(247) 評(píng)論(0)  編輯  收藏 所屬分類: Database
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(4)

          隨筆分類(85)

          隨筆檔案(89)

          文章分類(14)

          文章檔案(42)

          收藏夾(37)

          java

          oracle

          Sybase

          搜索

          •  

          積分與排名

          • 積分 - 211162
          • 排名 - 265

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 金溪县| 宣恩县| 温宿县| 安龙县| 射阳县| 子洲县| 苏尼特右旗| 肥城市| 阜新市| 怀仁县| 永定县| 武汉市| 南宁市| 岐山县| 龙泉市| 杭锦后旗| 灵璧县| 文成县| 江门市| 芜湖县| 富蕴县| 竹北市| 西宁市| 澄江县| 广昌县| 华池县| 滨海县| 凌云县| 阜康市| 县级市| 上栗县| 湖北省| 滕州市| 荆门市| 聂荣县| 株洲县| 博爱县| 沅陵县| 乌海市| 武威市| 江山市|