当前位置:数据库 > DB2 >>

DB2重定向恢复和前滚常见问题解析

DB2重定向恢复和前滚常见问题解析
 
前言 
数据库管理和维护工作中一项重要的内容就是对数据库进行定期的备份和恢复。这种工作的重要性除了表现在数据的保全,系统的容灾方面,还表现在为应用系统的开发和测试搭建数据库环境。 
设想在一个不断更新升级的应用环境中,数据库的数据在不断的更新,程序开发人员也在不断开发新的版本,建立测试数据和环境,对应用进行测试,再发布到生产环境下。这样,对于一个高复杂性的应用,使用生产环境中的真实数据来建立测试环境就变成了合理的选择。当然,在使用真实数据之前,为了保护公司利益可能需要删除或修改一些敏感的数据。 
在上述场景下,数据库管理员就要根据项目开发的要求,把生产环境的数据复制到开发和测试环境。数据库重定向恢复技术就提供了一个比较快的方式帮助管理员完成这项工作。 
本文针对哪有对 DB2 恢复有初步知识的读者,重点讨论在重定向恢复和前滚的过程当中经常碰到的问题,并通过一些实际应用中遇到的问题,探讨如何事先避免以及问题发生之后的解决办法。 
 
DB2 重定向恢复和前滚知识简介 
从上一节假定的场景中,我们知道 DB2 重定向恢复常用于在不同的环境中进行数据库的恢复。这些环境的不同就会给重定向恢复造成一些麻烦。比如:生产环境的内存通常比测试环境的都要大,生产环境中给事物日志分配的空间也要大一些,另外,最明显的区别就是测试环境中表空间的位置和原来在生产环境上不一样了。对于这些区别,提前了解和掌握以后就有助于预防和解决在数据库恢复时遇到的问题。下面就分别介绍重定向恢复和前滚的操作方法和相关命令。 
自动生成重定向恢复脚本以及重定向恢复状态查询 
DB2 提供了命令,供用户从一次数据库备份文件中提取数据库重定向恢复脚本。示例如下,其中 /db2_backup/db2inst1/sample 是数据库备份文件所在的目录,20101023180128 是数据库备份文件的时间戳。 
db2 restore db sample from /db2_backup/db2inst1/sample taken at 20101023180128 
redirect generate script redirect_sample.sql 
DB20000I The RESTORE DATABASE command completed successfully. 
 
所生成的重定向文件 redirect_sample.sql,可以分为三个部分: 
1. Restore 语句 
此语句用来标示一个重定向的恢复操作命令开始,它在普通恢复的命令上加了 redirect 参数。 
RESTORE DATABASE SAMPLE 
FROM '/db2_backup/db2inst1/sample' 
TAKEN AT 20101023180128 
INTO SAMPLE 
REDIRECT; 
 
2. set containers 语句: 
当目标数据库所的物理存储设备与原来的数据库不一样时,就需要下面的命令来指定新的物理容器。 
SET TABLESPACE CONTAINERS FOR 0 
USING ( 
  PATH '/db2inst1/SAMPLE' 
); 
SET TABLESPACE CONTAINERS FOR 1 
USING ( 
  PATH '/ db2inst1/temp' 
); 
SET TABLESPACE CONTAINERS FOR 2 
USING ( 
  DEVICE '/dev/rsample_1G' 131072 
); 
…… 
 
3. restore continue 语句: 
此语句代表重定向恢复语句序列完成,系统开始恢复数据库。 
RESTORE DATABASE SAMPLE CONTINUE; 
 
在数据库进行恢复的过程中,我们可以通过 list utilities 命令查看 restore 的状态。示例如下: 
db2 list utilities show detail 
 
ID = 4 
Type = RESTORE 
Database Name = SAMPLE 
Partition Number = 0 
Description = db 
Start Time = 10/24/2010 13:49:17.515893 
State = Executing 
Invocation Type = User 
Progress Monitoring: 
  Completed Work = 2938126336 bytes 
  Start Time = 10/24/2010 13:49:17.515898 
 
其中的 Completed Work 代表已完成的数据量,与备份文件的大小比较可以估算出大概的完成时间。 
常用前滚命令 , 所需日志文件的确定以及状态查询 
前滚命令多种多样,这里不一一列举。最常用的语句就是 rollforward to 和 rollforward complete。 
例如,使用指定目录的日志文件,前滚到某一时刻点: 
rollforward db sample to 2010-11-21-17.00.00.000000 
using local time overflow log path ( /db2_backup/sample/logs ) 
 
前滚结束: 
rollforward db sample complete overflow log path ( /db2_backup/sample/logs ) 
 
最有效的查询 rollforward 状态的语句: 
db2 rollforward db db_name query status 
 
例如,restore 成功结束,rollforward 还没有开始,查看状态会得到类似结果: 
db2 rollforward db sample query status 
 
  Rollforward Status 
 
Input database alias = sample 
Number of nodes have returned status = 1 
 
Node number = 0 
Rollforward status = DB pending 
Next log file to be read = S0001519.LOG 
Log files processed = - 
Last committed transaction = 2010-10-23-08.41.52.000000 UTC 
 
我们可以得知,rollforward 要读取的下一个日志文件是 S0001519.LOG。 
在数据库前滚的过程中,我们也可以通过 list utilities 查看前滚的状态。 
$ db2 list utilities show detail 
 
ID = 5 
Type = ROLLFORWARD RECOVERY 
Database Name = SAMPLE 
Partition Number = 0 
Description = Database Rollforward Recovery 
Start Time = 10/25/2010 01:45:44.392021 
State = Executing 
Invocation Type = User 
Progress Monitoring: 
  Phase Number [Current] = 1 
  Description = Forward 
  Completed Work = 824384727 bytes 
  Start Time = 10/25/2010 01:45:44.392051 
 
  Phase Number = 2 
  Description = Backward 
  Completed Work = 0 bytes 
  Start Time = Not Started 
 
 
DB2 重定向恢复常见问题解析 
在 DB2 重定向恢复的三个阶段中,错误常常发生在第二阶段,也就是 set tablespace containers 的时候。在这里列举了一些常见的错误,和这些错误的解决方法及预防。供大家参考。 
对裸设备类型的容器,大小计算错误 
命令及结果: 
db2 set tablespace containers for 8 using( DEVICE '/dev/rsample_1G' 262144 ) 
SQL1422N The size of the container is invalid. SQLSTATE=54039 
 
解决方法以及预防: 
容器大小 262144 不正确。结合 lslv 的检查结果和表空间的 pagesize,重新计算容器大小。 
lslv rsample_1G 
LOGICAL VOLUME: rsample_1G  VOLUME GROUP: datavg3 
LV IDENTIFIER: 00c790ea00004c000000011fb9a36069.112 PERMISSION: read/write 
VG STATE: active/complete 
LV STATE: opened/syncd 
TYPE: raw 
WRITE VERIFY: off 
MAX LPs: 512 
 
PP SIZE: 64 megabyte(s) 
COPIES: 1 
SCHED POLICY: parallel 
LPs: 16  
PPs: 16 
STALE PPs: 0 
BB POLICY: relocatable 
INTER-POLICY: minimum 
RELOCATABLE: yes 
INTRA-POLICY: middle 
UPPER BOUND: 1024 
MOUNT POINT: N/A 
LABEL: None 
MIRROR WRITE CONSISTENCY: on/ACTIVE 
EACH LP COPY ON A SEPARATE PV ?: yes 
Serialize IO ?: NO 
DEVI
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,