程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2 基礎: 使用重定向增量恢復的數據庫恢復

DB2 基礎: 使用重定向增量恢復的數據庫恢復

編輯:DB2教程

在上一篇文章( DB2 基礎:使用重定向恢復克隆 DB2 數據庫)中,我概述了使用重定向恢復操作恢復另一台機器上的 DB2 數據庫所需執行的步驟。 重定向恢復操作由兩個過程組成,中間還有一個表空間容器定義步驟。使用完整數據庫備份映像來克隆數據庫當然不錯,但是如果數據庫備份映像不足以將數據庫恢復到災難前一刻的狀態,而該數據庫又必須在另一台服務器上進行恢復,那麼情況會是如何呢?

假設您的數據庫服務器在火災中受損,您應該怎麼辦? 如果您已經將備份映像集和日志文件存儲在遠程機器上,其中備份映像集包括完整數據庫備份、聯機增量備份和聯機增量 delta 備份映像,日志文件中記錄了從最後一次進行備份操作時到發生災難時所執行的所有事務,並且您的數據庫支持前滾恢復(將數據庫配置參數 logretain設置為 ON)和增量備份(將數據庫配置參數 trackmod設置為 ON),那您就沒有什麼可擔心的,您完全可以通過下述方法在另外一台機器上重新恢復數據庫。

為了在另一台服務器上恢復該數據庫,您將必須執行 重定向增量數據庫恢復操作,接著執行 數據庫前滾操作。重定向增量恢復操作是對一組增量備份映像進行重定向恢復的操作。 增量備份映像包含了自最後一次 完整備份操作以來所作的所有更改。 增量 delta 備份映像包含了最後一次( 完整或增量)備份操作以來所作的所有更改。在成功完成數據庫恢復操作之後,在數據庫前滾操作期間要對數據庫再次應用某些事務,這些事務沒有記錄在任何數據庫備份映像中,但是記錄在恢復日志中。

以下(Windows)示例為您演示了如何成功地執行重定向增量恢復和前滾操作。為了方便起見,我的恢復操作不是在另一台 服務器上執行,而是在同一台機器上的另外一個 實例中進行的,但其原理和步驟與在另外一台 服務器上進行恢復沒有什麼區別,因為在同一機器上的不同實例在 邏輯上也是完全隔離的。

本示例中的源實例稱為 PROD。目標實例稱為 MYINST。我們打算使用 DB2 所附帶的 SAMPLE 數據庫。本例中的 SAMPLE 數據庫將創建在 D 盤上。

在 PROD 上創建 SAMPLE 數據庫,使之支持前滾恢復和增量備份,然後創建完整數據庫備份映像:

set DB2INSTANCE=PROD 
db2start 
db2sampl 
db2 update db cfg for sample using logretain on 
db2 update db cfg for sample using trackmod on 
db2 backup db sample 

這個映像的時間戳記是 20021022205203 ,該映像位於 D:\SAMPLE.0\PROD\NODE0000\CATN0000\20021022 。DB2 在發出 BACKUP DATABASE 命令的目錄下創建這個子目錄樹。該子目錄名稱如下所示:

      <database_alias.backup_type>\<instance_name>\<node_number>\<catalog_node_number>\<date> 

在這個子目錄樹內會有個表示實際備份映像的文件( 205203.0 )。文件名表示進行備份的時間。

注:如果您將備份映像重新定位到另一台機器中,請在目標機器上創建上述路徑(用適當的目標實例名替代 PROD)並將該備份映像復制到該目錄。

連接至 SAMPLE 數據庫並對其中一個表(比如 SALES)應用事務,然後調用聯機增量備份操作(聯機備份操作允許其它應用程序並行訪問數據庫)。

db2 connect to sample 
db2 insert into sales values ('10/21/2002','GOUNOT','Ontario-South',3) 
db2 insert into sales values ('10/23/2002','GOUNOT','Ontario-North',7) 
db2 insert into sales values ('10/24/2002','GOUNOT','Quebec',4) 
db2 insert into sales values ('10/25/2002','GOUNOT','Manitoba',2) 
db2 backup db sample online incremental 

這個映像的時間戳記是 20021022205237 。現在子目錄樹內有兩個備份映像。

連接至 SAMPLE 數據庫並對 SALES 表重新應用一些事務,然後調用聯機增量 delta 備份操作:

db2 connect to sample 
db2 insert into sales values ('10/28/2002','LEE','Ontario-South',5) 
db2 insert into sales values ('10/28/2002','LEE','Ontario-North',1) 
db2 backup db sample online incremental delta 

這個映像的時間戳記是 20021022205302 。現在子目錄樹內有三個備份映像了(完整備份、增量備份和增量 delta 備份)。

連接至 SAMPLE 數據庫並對 SALES 表再應用一些事務:

db2 connect to sample 
db2 insert into sales values ('10/31/2002','LUCCHESSI','Ontario-South',9) 
db2 insert into sales values ('10/31/2002','LUCCHESSI','Quebec',2) 
db2 insert into sales values ('10/31/2002','LUCCHESSI','Manitoba',7) 
db2 connect reset 

我們將需用事務日志以及備份映像來恢復 MYINST 上的 SAMPLE 數據庫。如果有必要,請驗證這些日志的位置:

db2 get db cfg for sample 

這個命令可以顯示日志文件的存儲路徑(察看logpath參數)。

啟動 MYINST,然後調用重定向恢復操作的第一步。

set DB2INSTANCE=MYINST 
db2start 
db2 restore db sample incremental automatic from d taken at 20021022205302 to d 
 redirect 

如果 RESTORE DATABASE 命令是從包含備份映像的目錄之外的目錄調用的,那麼必須指定 FROM 參數。TO 參數指定了目標數據庫目錄(只有在 Windows 操作系統上指定驅動器字母)。如果您指定了 AUTOMATIC,就不必對恢復數據庫所必需的(完整和增量)映像組中的每個備份映像發出單獨的 RESTORE DATABASE 命令。

為三個缺省表空間(SYSCATSPACE、TEMPSPACE1 和 USERSPACE1)定義新的表空間容器,這三個表空間和恢復的數據庫相關:

db2 set tablespace containers for 0 using (path 'd:\ts0con1') 
db2 set tablespace containers for 1 using (path 'd:\ts1con1') 
db2 set tablespace containers for 2 using (path 'd:\ts2con1') 

您可以使用 LIST TABLESPACES SHOW DETAIL 命令得到源數據庫中所有表空間的信息;這有助您確保已為目標數據庫中的所有表空間都設置了容器。

完成重定向恢復操作:

db2 restore db sample continue 

數據庫處於前滾掛起狀態,在可以訪問它之前必須對其進行前滾操作來消除該狀態。

確定 MYINST 上 SAMPLE 數據庫的日志路徑,並將日志從 PROD 上的 SAMPLE 數據庫復制到下面這個位置:

db2 get db cfg for sample 
copy PROD\NODE0000\SQL00001\SQLOGDIR\*.* D:\MYINST\NODE0000\SQL00002\SQLOGDIR 

GET DATABASE CONFIGURATION 命令的輸出包括了到日志文件的路徑。

通過前滾事務日志,獲取最後一次備份操作後對數據庫所作的所有更改,從而完成數據庫恢復操作:

db2 rollforward db sample to end of logs and stop 

驗證:已經正確地為已恢復數據庫編目,您為其定義的表空間容器與已恢復的數據庫真正關聯在了一起,所有針對 PROD 上的 SAMPLE 數據庫的事務都反映在 MYINST 上已恢復數據庫中:

db2 list db directory 
db2 connect to sample 
db2 list tablespace containers for 0 
db2 list tablespace containers for 1 
db2 list tablespace containers for 2 
db2 select * from sales 
db2 connect reset 
db2 terminate 
db2stop 
set DB2INSTANCE=PROD 
db2stop 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved