 | 级别: 初级 Roman B. MelnykIBM 多伦多实验室
2002 年 12 月 01 日 本文为您提供了使用增量备份在 Windows 环境中的另一台服务器上恢复 DB2 数据库的基础知识。
本文适用于 IBM® DB2® Universal Database for Linux、UNIX® 和 Windows®
在上一篇文章(
DB2 基础:使用重定向恢复克隆 DB2 数据库)中,我概述了使用重定向恢复操作恢复另一台机器上的 DB2 数据库所需执行的步骤。
重定向恢复操作由两个过程组成,中间还有一个表空间容器定义步骤。使用完整数据库备份映像来克隆数据库当然不错,但是如果数据库备份映像不足以将数据库恢复到灾难前一刻的状态,而该数据库又必须在另一台服务器上进行恢复,那么情况会是如何呢?
假设您的数据库服务器在火灾中受损,您应该怎么办? 如果您已经将备份映像集和日志文件存储在远程机器上,其中备份映像集包括完整数据库备份、联机增量备份和联机增量 delta 备份映像,日志文件中记录了从最后一次进行备份操作时到发生灾难时所执行的所有事务,并且您的数据库支持前滚恢复(将数据库配置参数
logretain设置为 ON)和增量备份(将数据库配置参数
trackmod设置为 ON),那您就没有什么可担心的,您完全可以通过下述方法在另外一台机器上重新恢复数据库。
为了在另一台服务器上恢复该数据库,您将必须执行
重定向增量数据库恢复操作,接着执行
数据库前滚操作。重定向增量恢复操作是对一组增量备份映像进行重定向恢复的操作。
增量备份映像包含了自最后一次
完整备份操作以来所作的所有更改。
增量 delta 备份映像包含了最后一次(
完整或增量)备份操作以来所作的所有更改。有关更多的增量备份操作的信息,请查阅文章
使用 DB2 增量备份。在成功完成数据库恢复操作之后,在数据库前滚操作期间要对数据库再次应用某些事务,这些事务没有记录在任何数据库备份映像中,但是记录在恢复日志中。
以下(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
|
更多的信息
关于作者  | 
|  |
Roman B. Melnyk博士是 DB2 信息开发(Information Development)团队的高级成员,专门研究数据库管理和 DB2 实用程序。在 IBM 任职的八年多时间里,Roman 已经撰写了许多关于 DB2 的书籍和其它相关材料。Roman 最近与别人合著了
DB2: The Complete Reference(Osborne/McGraw-Hill,2001)、
DB2 Fundamentals Certification for Dummies(Hungry Minds,2001)和
DB2 for Dummies(IDG Books,2000)。可以通过
roman_b_melnyk@hotmail.com与他联系。
|
对本文的评价
|  |