DB2 V9聯機備份還原(七)

rheet1978發表於2008-07-01
手工增量復原示例資料庫DB2TEST1

假如備份映像有N個,我們一般會執行N+1次復原才能完成整個復原操作。在手工復原期間,使用者必須對復原涉及的每個映像手工發出復原命令,按照以下順序完成此操作:最後一個、第一個、第二個、第三個,依次類推,並且包括最後一個映像。

首先對時間點最靠後(是按照時間軸的方向往後,靠近現在的時間方向是後)的增量備份映像進行復原操作,此映像也被稱為增量復原的目標映像,因為它還要成為要復原的最後映像。增量目標映像是使用RESTORE DATABASE命令中的TAKEN AT引數指定的。接下來複原最新的完整資料庫或表空間映像以建立一個基線,以根據它來應用每個後繼的增量備份映像。 按產生的順序,在復原的基線映像的頂部,復原需要的各個完整增量備份映像或表空間增量備份映像。依次對各個映像進行復原,直到最後一個備份映像讀了兩次。在整個增量復原操作期間會訪問兩次目標映像。在第一次訪問期間,只從映像讀取初始資料,而不讀取任何使用者資料。只在第二次訪問期間才讀取並處理完整的映像。 必須訪問兩次增量復原操作的目標映像,以確保資料庫最初是使用正確的歷史記錄、資料庫配置以及將在復原操作期間建立的資料庫表空間定義來配置的。如果自從進行了最初的完整資料庫備份映像以來已刪除了表空間,將從備份映像中讀取該映像的表空間資料,但在增量復原處理期間會忽略該資料。

下面我們採用手工的方式復原示例資料庫DB2TEST1,所使用的備份映像有

l         聯機備份映像(時間戳20070929094546),包含了日誌檔案S0000008.LOG。

l         聯機增量備份映像(時間戳20070929094818),包含了日誌檔案S0000010.LOG。

l         聯機差異備份映像(時間戳20070929095249),包含了日誌檔案S0000012.LOG。

在DB2CLP視窗中,因為最後一個增量備份映像是聯機差異備份映像(時間戳為20070929095249),所以我們將首先對差異備份映像執行復原操作,通過使用RESTORE DATABASE命令的TAKEN AT TIMESTAMP選項來指定目標映像。首先進入到C:\DB2\NODE0000\SQL00002\SQLOGIDR\中,此路徑是示例資料庫DB2TEST1的活動日誌目錄。在此目錄下,刪除所有的日誌檔案。注意,生產系統不能刪除活動日誌,否則資料庫會當機。本示例是為了演示如何還原資料庫,刪除日誌後隨即執行還原,為了更清晰的看到如何利用備份檔案中的日誌進行還原,故刪除了以前的活動日誌。通過使用RESTORE DATABASE命令進行復原,具體如清單25所示:

- - 清單25 .手工增量復原第一步,對最後一個備份映像進行復原

 

C:\> db2 restore db db2test1 incremental taken at 20070929095249 logtarget C:\DB2\NODE0000\SQL00002\SQLOGDIR

SQL2539W  警告!正在復原至與備份映像資料庫相同的現有資料庫。資料庫檔案將被刪除。

 

 

要繼續嗎?( y / n ) y

DB20000I  RESTORE DATABASE命令成功完成。

 

如清單25所示,還原的過程中,會提示“正在復原至與備份映像資料庫相同的現有資料庫。資料庫檔案將被刪除。是否要繼續?”這時候選擇y,也就是“是”的意思,回車。在命令中需要注意INCREMENTAL選項,此選項表示我們進行的復原是增量復原。另外,LOGTARGET選項,指定從備份映像檔案(時間戳為20070929095249)匯出日誌檔案到此路徑中。如果指定了LOGTARGET選項,在執行RESTORE DATABASE命令時,DB2將把日誌檔案放到指定的路徑中,如果目標路徑中已經存在同名的日誌檔案,復原操作將失敗並返回一個錯誤。如果未指定LOGTARGET選項,則不會從備份映像中還原任何日誌檔案。

如果指定了LOGTARGET選項,但是備份映像中沒有包含任何日誌檔案,則在嘗試復原操作時會返回一個錯誤。如果指定了無效或只讀的路徑,復原操作會報SQL2581N錯誤。在指定LOGTARGET選項條件下 ,復原資料庫或表空間的過程中,如果不能抽取一個或多個日誌檔案,則復原操作失敗並返回錯誤。還可以選擇只復原儲存在備份映像中的日誌檔案。要執行此操作,可使用RESTORE DATABASE命令的LOGTARGET選項指定LOGS選項。以此方式復原日誌檔案時,如果復原操作遇到任何問題,則復原操作失敗並返回錯誤。

下面我們對聯機全量備份映像(時間戳20070929094546)進行復原操作,在DB2CLP視窗中,發出RESTORE DB命令,具體如清單26所示:

- - 清單26 .手工增量復原第二步,對第一個備份映像進行復原

 

C:\> db2 restore db db2test1 incremental taken at 20070929094546 logtarget  C:\DB2\NODE0000\SQL00002\SQLOGDIR

DB20000I  RESTORE DATABASE命令成功完成。

 

命令成功完成,這樣就把聯機備份映像中的S0000008.LOG日誌檔案釋放到了C:\DB2\NODE0000\SQL00002\SQLOGIDR\目錄中。RESTORE語句中的INCREMENTAL作用同上,還是表示增量復原的意思。

執行完對第一個備份映像的復原後,緊接著需要對第二個備份映像進行復原,我們第二個備份映像是聯機增量備份映像(時間戳為20070929094818)。在DB2CLP視窗中,繼續發出RESTORE DB命令,具體如清單27所示:

- - 清單27 .手工增量復原第三步,對第二個備份映像進行復原

 

C:\> db2 restore db db2test1 incremental taken at 20070929094818 logtarget  C:\DB2\NODE0000\SQL00002\SQLOGDIR

SQL2580W  警告!將這些日誌復原至包含現有日誌檔案的路徑。在復原期間試圖覆蓋現有日誌檔案將導致復原操作失敗。

要繼續嗎?( y / n ) y

DB20000I  RESTORE DATABASE命令成功完成。

命令成功完成,如清單27所示,在還原的過程中,會提示“SQL2580W 警告!將這些日誌復原至包含現有日誌檔案的路徑。在復原期間試圖覆蓋現有日誌檔案將導致復原操作失敗。是否要繼續?”這時候選擇Y,也就是“是”的意思,回車。

這樣就把聯機備份映像中的S0000010.LOG日誌檔案釋放到了C:\DB2\NODE0000\SQL00002\SQLOGIDR\目錄中。

當對第二個備份映像復原完成後,接著就需要對第三個、第四個,...最後一個備份映像進行復原,由於我們第三個備份映像就是最後一個備份映像,所以我們在DB2CLP視窗中,發出RESTORE DB命令,對差異備份映像(時間戳20070929095249)進行復原操作,具體如清單28所示:

- - 清單28 .手工增量復原第四步,對第三個備份(也是最後一個)映像進行復原

 

C:\> db2 restore db db2test1 incremental taken at 20070929095249 logtarget C:\DB2\NODE0000\SQL00002\SQLOGDIR

SQL2580W  警告!將這些日誌復原至包含現有日誌檔案的路徑。在復原期間試圖覆蓋現有日誌檔案將導致復原操作失敗。

要繼續嗎?( y / n ) y

DB20000I  RESTORE DATABASE命令成功完成。

命令成功完成,如清單28所示,還原的過程中,會提示“SQL2580W  警告!將這些日誌復原至包含現有日誌檔案的路徑。在復原期間試圖覆蓋現有日誌檔案將導致復原操作失敗。是否要繼續?”這時候選擇y,也就是“是”的意思,回車。

這樣就把聯機備份映像中的S0000012.LOG日誌檔案釋放到了C:\DB2\NODE0000\SQL00002\SQLOGIDR\目錄中。由於歸檔日誌情況下的利用聯機備份映像還原必須進行前滾恢復,所以接下來我們對示例資料庫DB2TEST1進行前滾恢復。

在DB2CLP視窗中發出ROLLFORWARD DB命令,把日誌往前滾動到日誌的末尾,具體如清單29所示:

 

- - 清單 29 .對示例資料庫DB2TEST1進行前滾恢復

 

C:\> db2 rollforward db db2test1 to end of logs and stop

 

                                 前滾狀態

 

 輸入資料庫別名                      = db2test1

 節點數已返回狀態                = 1

 

 節點號                                = 0

 前滾狀態                                    = 未暫掛

 下一個要讀取的日誌檔案          =

 已處理的日誌檔案                = S0000012.LOG - S0000013.LOG

 上次落實的事務                  = 2007-09-29-01.52.49.000000 UTC

 

DB20000I  ROLLFORWARD命令成功完成。

 

 

至此,對示例資料庫DB2TEST1的復原工作全部完成。一共執行了4次恢復命令,使用了3個備份映像(聯機全量備份映像、聯機增量備份映像、聯機差異備份映像)。實際上,我們在生產環境指定策略的時候,一般會在一個比較長的時間點進行全量備份,在一個相對較長的時間點進行增量備份,在一個比較短的時間點進行差異備份。比如,我們可以每個月底的最後一天晚上進行全量備份,每個月的月中進行增量備份,每天晚上進行差異備份,這樣既保證了資料庫的資料安全,又保證了不會佔用太多的儲存空間來儲存備份映像檔案。

在實際的復原過程中,如果在中間的步驟碰上錯誤,可以發出指定了 INCREMENTAL ABORT選項的RESTORE DATABASE命令。這將清除所有餘下的資源,以便以後可以繼續手工增量復原。

 

此時我們在DB2CLP視窗中,連線上示例資料庫DB2TEST1,檢視示例表TEST1,可以看到我們在差異備份之前插入的資料所有記錄都已經成功恢復,具體如清單30所示:

 

- - 清單 30 .檢視示例表TEST1

 

C:\> db2 connect to db2test1

 

   資料庫連線資訊

 

 資料庫伺服器         = DB2 / NT 9.1.0

 SQL 授權標識         = RHETTE

 本地資料庫別名       = DB2TEST1

 

 

C:\> db2 select * from test1

 

ID          NAME       NOTE

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

          1                RHETTE     the first rows

          2                DANIEL     the second rows

          3                SCA        the third rows

          4                Danaus     the forth rows

          5                Martin     the fifth rows

          6                Scott      the sixth rows

          7                slave      the seventh rows

          8                New York   the eighth rows

          9                Houston    the ninth rows

 

  9 條記錄已選擇。

 

 

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

相關文章