存储 频道

征文:DB2 V9联机备份还原

自动增量复原示例数据库DB2TEST1
如果在复原时指定AUTOMATIC选项,则将对数据库进行自动复原工作。对我们来说,只要执行一次复原操作就可以了,实际上是数据库管理器帮我们自动完成了像手工复原数据库的那么多操作。对于自动增量复原,只在指定要使用的目标映像(最后一个的映像)时发出带AUTOMATIC选项的RESTORE命令一次。然后,DB2使用数据库历史记录来确定余下的必需备份映像并复原它们。   
下面我们采用自动的方式复原示例数据库DB2TEST1,所使用的备份映像有:
l         联机备份映像(时间戳20070929094546),包含了日志S0000008.LOG
l         联机增量备份映像(时间戳20070929094818),包含了日志S0000010.LOG
l         联机差异备份映像(时间戳20070929095249),包含了日志S0000012.LOG。
首先进入到C:\DB2\NODE0000\SQL00002\SQLOGIDR\中,此路径是示例数据库DB2TEST1的活动日志目录。在此目录下,删除所有的日志文件。注意,生产系统不能删除活动日志,否则数据库会宕机。本示例是为了演示如何还原数据库,删除日志后随即执行还原,为了更清晰的看到如何利用备份文件中的日志进行还原,故删除了以前的活动日志。
因为最后一个增量备份映像是联机差异备份映像(时间戳20070929095249),所以我们将首先对差异备份映像执行复原操作,在DB2CLP窗口中,通过使用RESTORE DATABASE命令的TAKEN AT timestamp选项来指定目标映像,并使用INCREMENTAL AUTOMATIC选项来进行自动增量复原,具体如清单31所示:
- - 清单 31 .自动增量复原示例数据库DB2TEST1
 
C:\> db2 restore db db2test1 incremental automatic taken at 20070929095249
SQL2539W 警告!正在复原至与备份映像数据库相同的现有数据库。数据库文件将被删除。
 
要继续吗?( y / n y
DB20000I RESTORE DATABASE命令成功完成。
 
 
命令成功完成,如清单31所示,还原的过程中,会提示“正在复原至与备份映像数据库相同的现有数据库。数据库文件将被删除。是否要继续?”这时候选择y,也就是“是”的意思,回车。至此复原工作就已经做完了,接下来我们需要对示例数据库做前滚恢复操作。为了进行前滚恢复,需要从我们的3个备份映像中分别恢复日志文件。
 
可以用复原命令选择只复原保存在备份映像中的日志文件。要执行此操作,可使用RESTORE DATABASE命令的LOGTARGET选项指定LOGS选项。以此方式复原日志文件时,如果复原操作遇到任何问题,则复原操作失败并返回错误。
 
首先从联机全量备份映像(时间戳20070929094546)中提取日志文件S0000008.LOG,我们在DB2CLP窗口中,发出RESTORE DATABASE命令,并对LOGTARGET选项指定LOGS选项,使得复原命令不执行复原操作,只是单纯的从备份映像文件中提取日志文件,具体如清单32所示:
 
- - 清单 32 .从备份映像中提取日志文件
 
C:\> db2 restore db db2test1 logs incremental taken at 20070929094546 logtarget C:\DB2\NODE0000\SQL00002\SQLOGDIR
DB20000I RESTORE DATABASE命令成功完成。
 
命令成功完成,这样就把联机备份映像中的S0000008.LOG日志文件释放到了C:\DB2\NODE0000\SQL00002\SQLOGIDR\目录中。
下面我们接着从联机增量备份映像(时间戳20070929094818)中提取日志文件S0000010.LOG我们在DB2CLP窗口中,发出RESTORE DATABASE命令,并对LOGTARGET选项指定LOGS选项,使得复原命令不执行复原操作,只是单纯的从备份映像文件中提取日志文件,具体如清单33所示:
- - 清单33 .从备份映像中提取日志文件
 
C:\>db2 restore db db2test1 logs incremental taken at 20070929094818   logtarget C:\DB2\NODE0000\SQL00002\SQLOGDIR
SQL2580W 警告!将这些日志复原至包含现有日志文件的路径。在复原期间试图覆盖现有日志文件将导致复原操作失败。
要继续吗?( y / n y
DB20000I RESTORE DATABASE命令成功完成。
如清单33所示,还原的过程中,会提示“SQL2580W 警告!将这些日志复原至包含现有日志文件的路径。在复原期间试图覆盖现有日志文件将导致复原操作失败。是否要继续?”这时候选择Y,也就是“是”的意思,回车。命令成功完成,这样就把联机备份映像中的S0000010.LOG日志文件释放到了C:\DB2\NODE0000\SQL00002\SQLOGIDR\目录中。
下面我们再从联机差异备份映像(时间戳20070929095249)中提取日志文件S0000010.LOG我们在DB2CLP窗口中,发出RESTORE DATABASE命令,并对LOGTARGET选项指定LOGS选项,使得复原命令不执行复原操作,只是单纯的从备份映像文件中提取日志文件,具体如清单34所示:
- - 清单34 .从备份映像中提取日志文件
 
C:\> db2 restore db db2test1 logs incremental taken at 20070929095249 logtarget C:\DB2\NODE0000\SQL00002\SQLOGDIR
SQL2580W 警告!将这些日志复原至包含现有日志文件的路径。在复原期间试图覆盖现有日志文件将导致复原操作失败。
要继续吗?( y / n y
DB20000I RESTORE DATABASE命令成功完成。
 
 
如清单34所示,还原的过程中,会提示“SQL2580W 警告!将这些日志复原至包含现有日志文件的路径。在复原期间试图覆盖现有日志文件将导致复原操作失败。是否要继续?”这时候选择y,也就是“是”的意思,回车。命令成功完成,这样就把联机备份映像中的S0000012.LOG日志文件释放到了C:\DB2\NODE0000\SQL00002\SQLOGIDR\目录中。
由于归档日志情况下的利用联机备份映像还原必须进行前滚恢复,所以接下来我们进行前滚恢复,在DB2CLP窗口中发出ROLLFORWARD DATABAE命令,具体如清单35所示:
- - 清单35 .对示例数据库DB2TEST1进行前滚恢复
 
C:\> db2 rollforward db db2test1 to end of logs and stop
 
                                 前滚状态
 
 输入数据库别名                      = db2test1
 节点数已返回状态                = 1
 
 节点号                                = 0
 前滚状态                                    = 未暂挂
 下一个要读取的日志文件          =
 已处理的日志文件                = S0000012.LOG - S0000014.LOG
 上次落实的事务                  = 2007-09-29-13.40.25.000000 UTC
 
DB20000I ROLLFORWARD命令成功完成。
 
 
至此,对示例数据库DB2TEST1的恢复工作全部完成。
下面我们在DB2CLP窗口中,连接上示例数据库DB2TEST1,查看示例表TEST1,可以看到我们在差异备份之前插入的数据所有记录都已经成功恢复,具体如清单36所示:
 
- - 清单 36 .查看示例表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 条记录已选择。
 
 
我们在备份、复原以及前滚的过程中,可是使用LISTUTILITIES命令来监控数据库上的备份、复原和前滚操作。
比如,对示例数据库DB2TET1,我们打开一个新的DB2CLP窗口,在这个窗口中连上示例数据库DB2TEST1,发出BACKUP DB命令,对示例数据库DB2TEST1做一次全备,具体如清单37所示:
 
- - 清单 37 . 全备示例数据库DB2TEST1
 
C:\> db2 connect to db2test1
 
   数据库连接信息
 
 数据库服务器         = DB2/NT 9.1.0
 SQL 授权标识         = RHETTE
 本地数据库别名       = DB2TEST1
 
C:\>db2 backup db db2test1
 
备份成功。此备份映像的时间戳记是:20071023111253
 
 
在清单37中所示的全备完成之前,我们在另外一个DB2CLP窗口中,发出LISTUTILITIES命令并指定SHOWDETAIL选项,可以查看数据库的备份情况,具体如清单38所示:
- - 清单 38 . 使用LISTUTILITIES命令来监控数据库上的备份、复原和前滚操作
 
C:\> db2 list utilities show detail
 
标识                                       = 1
类型                                       = BACKUP
数据库名称                                 = DB2TEST1
分区号                                     = 0
描述                                       = offline db
开始时间                   = 2007-10-23 11:13:13.485742
状态                   = 执行
调用类型               = 用户
调速:
   优先级                                  = 未调速
进度监视:
   估计的完成百分比              = 5
      总计工作                   = 43216142 bytes
      已完成的工作               = 2087158 bytes
      开始时间                   = 2007-10-23 11:13:13.505956
 
对于备份操作,将指定要处理的最初估计字节数。随备份操作进度更新要处理的字节数。显示的字节与映像的大小不相等,不应该用作备份映像大小的估计值。视映像是增量备份,还是压缩备份而定,实际映像可能小很多。
对于复原操作,将不给定任何最初的估计值。而是指定UNKNOWN。因为从映像中读取每个缓冲区,所以将会更新实际读取的字节量。对于其中可能复原多个映像的自动增量复原操作,将使用阶段来跟踪进度。每个阶段提供一个从增量链中复原的映像。最初,只有显示一个阶段。复原第一个映像之后,将显示阶段的总数。在复原每个映像时,将根据已处理的字节数来更新完成的阶段数。
对于崩溃恢复和前滚恢复,将有两个进度监控阶段:FORWARD和BACKWARD。FORWARD阶段期间中,读取日志文件并将日志记录应用于数据库。对于崩溃恢复,通过使用起始日志序号至最后一个日志文件的结尾来估计工作总量。对于前滚恢复,当此阶段开始时,将工作总量估计值指定为UNKNOWN。按字节计的已处理工作量将随进程的继续而更新。
BACKWARD阶段中,回滚FORWARD阶段期间中应用任何未落实的更改。将提供按字节计的需处理日志数据量的估计值。按字节计的已处理工作量将随进程的继续而更新。
参考资料
学习

获得产品和技术
0
相关文章