`
独善其身008
  • 浏览: 171344 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

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
DEVICESUBTYPE : DS_LVZ

计算公式如下:PPs * PP Size / pagesize
此处,pagesize 按照8 K 计算 。
db2 set tablespace containers for 8 using( DEVICE '/dev/rsample_1G' 131072 )
DB20000I The SET TABLESPACE CONTAINERS command completed successfully.

指定的容器,已经被使用了
命令及结果:
db2 set tablespace containers for 64 using( DEVICE '/dev/rsample_4G' 524288 )
SQL0294N The container is already in use. SQLSTATE=42730

解决方法以及预防:
通过 lslv 检查裸设备的状态,注意其中 LV STATE 的值。如果是 opened/syncd,意味着这个容器正在被其他的系统占用。如果是 closed/syncd,就可能是可用的设备。这里说“可能”是因为有些时候,比如数据库停掉以后,它所使用的所有的裸设备就都是 closed/syncd 状态,但如果这时其他应用使用了这个裸设备,就会让这个数据库受损。所以在使用前一定要确认,没有其他系统在使用这个裸设备。
DB2 在使用一个裸设备的时候会设置一些标志位,表明哪一个实例的数据库正在使用这个裸设备。但是当 DB2 删除一个表空间或者其中一个容器的时候,有时候这些标志位不会被清空,这时候虽然没有其他的数据库在使用这个设备,依然会出现上面的错误。在确认没有其他系统使用之后,就可以用下面的 DB2 命令手动清空这些标志位。
db2untag -f /dev/rsample_4G

指定的容器类型,与原有容器不一致
命令及结果:
db2 set tablespace containers for 3 using( PATH '/db2inst1/SAMPLE/TBS/SYSTOOL’)
SQL0298N Bad container path. SQLSTATE=428B2

解决方法以及预防:
原有容器是 FILE 类型,如果在重定向恢复的时候指定为 PATH,就会报错。
修改后:
db2 set tablespace containers for 3
using( File '/db2inst1/SAMPLE/TBS/SYSTOOL.DAT' 100 )
DB20000I The SET TABLESPACE CONTAINERS command completed successfully.

指定的容器名发生错误
命令及结果:
db2 set tablespace containers for 106
using( DEVICE '/dev/dev/rsample_500M' 65536 )
SQL0298N Bad container path. SQLSTATE=428B2

解决方法以及预防:
确保容器名及路径的正确性。
db2 set tablespace containers for 106
using( DEVICE '/dev/rsample_500M' 65536)
DB20000I The SET TABLESPACE CONTAINERS command completed successfully.

Restore db continue 的时候发生错误,数据库恢复目录满
db2 restore db sample continue
SQL2544N The directory where the database is being restored has become full.

解决方法以及预防:
检查包含 PATH 的语句,
set tablespace containers for 0 using(
  PATH '/db2inst1/SAMPLE'
) ;

可能的原因:
目录 /db2inst1/SAMPLE 满了。
重点检查 SMS 表空间所在目录的使用情况。更换或者扩充文件系统。也可以通过 db2diag.log 文件得到更详细的信息。
回页首
前滚常见问题解析
运行 rollforward 时,日志文件缺失
命令及结果:
db2 "rollforward db sample to 2010-10-24-17.00.00
using local time overflow log path (/db2_backup/db2inst1/logs)"

SQL4970N Roll-forward recovery on database "SAMPLE" cannot reach the specified
stop point (end-of-log or point-in-time) on database partition(s) "0".
Roll-forward recovery processing has halted on log file "S0102805.LOG".

错误日志(db2diag.log):
2010-11-23-03.03.17.731773-300 I2966741A419 LEVEL: Error
PID : 1089734 TID : 2615 PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE
EDUID : 2615 EDUNAME: db2loggr (SAMPLE) 0
FUNCTION: DB2 UDB, data protection services, sqlpgasn, probe:650
RETCODE : ZRC=0x801000BB=-2146434885=SQLPR_MISSING_LOGFILES
"rollforward missing log files"

解决方法以及预防:
从备份磁盘获取所需的日志文件。然后再次运行 rollforward 命令。
也可以通过以下命令来提前准备所需日志文件,避免出错。可以从“Start Time”和“End Time”判断 rollforward 到某个时间点所需的最后的一个日志文件。
db2 list history archive log since 20101023040030 for sample | more
  List History File for sample
Number of matching file entries = 30
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
-- --- -------- ---- --- ------- ------- --------
  X D 20101023045856 1 U S0102805.LOG C0000000
-------------------------------------------
-------------------------------------------
  Comment:
Start Time: 20101023045856
  End Time: 20101026033936
  Status: A
-------------------------------------------

运行 rollforward complete 时,活动日志空间满
命令及结果:
db2 "rollforward db sample complete overflow log path /db2_backup/db2inst1/logs)"
SQL1004C There is not enough storage on the file system to process the command.

错误日志(db2diag.log):
2010-10-27-23.06.28.470787-240 I172869537A496 LEVEL: Error
PID : 1970552 TID : 5655 PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE
APPHDL : 0-61 APPID: *LOCAL.db2inst1.101028030442
AUTHID : DB2inst1
EDUID : 5655 EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, recovery manager, sqlpForwardRecovery, probe:2610
RETCODE : ZRC=0x850F000C=-2062614516=SQLO_DISK "Disk full."
  DIA8312C Disk was full.

解决方法以及预防:
修改数据库配置参数 NEWLOGPATH,指定空间更大的目录作为活动日志目录。然后再次运行 rollforward 命令。
db2 update db cfg for sample using NEWLOGPATH /db2_backup/db2inst1_log01/sample


或者提前修改 redirect restore 命令,在做数据库恢复的时候就指定更大的目录作为活动日志目录。这样可以避免在 rollforward 的过程中遇到问题。
db2 "restore db sample \
  from /db2_backup/db2inst1/backup \
  taken at 20101023084025 newlogpath /db2_backup/db2inst1_log01/sample \
  redirect"


与缓冲池相关的错误 ,解决方法以及预防
命令及结果:
db2 "rollforward db sample to 2010-11-21-17.00.00.000000
using local time overflow log path ( /db2_backup/db2inst1/SAMPLE/logs ) "
SQL1218N There are no pages currently available in bufferpool "".
SQLSTATE=57011

错误日志(db2diag.log):
2010-11-24-05.19.14.842891-300 I67571A941 LEVEL: Error
PID : 296330 TID : 75304
PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE
APPHDL : 0-27 APPID: *LOCAL.db2inst1.101124101914
AUTHID : DB2INST1
EDUID : 75304 EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, SQO Memory Management, SqloMemController::registerConsumer, p
robe:1000
MESSAGE : ZRC=0x8B0F0000=-1961951232=SQLO_NOMEM "No Memory Available"
  DIA8300C A memory heap error has occurred.

解决方法以及预防:
这里的错误是源数据库设置的缓冲区太大,目标数据库所在系统无法支持。我们可以修改参数值 DB2_OVERRIDE_BPF,强制 DB2 采用较小的缓冲区。重启实例后,再次执行 rollforward 操作。
db2set DB2_OVERRIDE_BPF=500 (500 为假定值)

与表空间状态相关的错误,解决方法以及预防
LOAD 操作可能会对 rollforward 造成一定的影响。有时候在 rollforward 的过程中需要交互操作。如果选择 (t),会造成表空间的状态不正常。
命令及结果:
db2 "rollforward db sample to 2010-11-19-17.00.00
using local time overflow log path ( /db2_backup/db2inst1/logs )"

SQL3799W Load recovery for table "TEST .WORK_DETAIL" at time
"20101116221501" on node "0" is pending due to warning "-2061" with additional
information "/dev/null".
Do you want to continue(c),terminate this device only(d),abort the utility(t) ?

错误日志(db2diag.log):
2010-11-24-11.15.39.678474-300 I806561A381 LEVEL: Warning
PID : 2126036 TID : 1 PROC : db2redom (SAMPLE) 0
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE
APPHDL : 0-668 APPID: *LOCAL.db2inst1.081124154042
FUNCTION: DB2 UDB, recovery manager, sqlpRecDbRedo, probe:2129
MESSAGE : Tablespace 27 in restore pending state.

解决方法以及预防:
我们可以查看某一备份时刻之后的 LOAD 操作情况。
db2 list history backup since 20101120170928 for sample | more

如果出现了 rollforward 造成的表空间不可用。我们可以进行相应的表空间恢复。或者删除、重建相应的表空间,并导入数据。
与表状态相关的错误,解决方法以及预防
在数据库 restore 和 rollforward 完成之后,检查每个数据表的状态时,可能会发现有的数据表状态不可用。简单的方法是过滤 db2diag.log 文件,找出类似下面的错误信息。
错误日志(db2diag.log):
2010-11-26-08.01.51.170966-300 E21515A743 LEVEL: Warning
PID : 3104786 TID : 26364 PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE
APPHDL : 0-380 APPID: *LOCAL.db2inst1.101126125907
AUTHID : DB2INST1
EDUID : 26364 EDUNAME: db2redom (SAMPLE) 0
FUNCTION: DB2 UDB, data management, sqldMarkObjInErr, probe:1
MESSAGE : ADM5571W DB2 is marking the "DATA" object with id "141" in
  tablespace "8" for table "TBSPACEID=8.TABLEID=141" unavailable.
  Either the table will have to be dropped, or if the object is part of
  a partitioned table the partition in error can be detached or the
  index in error can be dropped.

解决方法以及预防:
一般情况下,我们需要删除并重建这些数据表。必要的情况下,我们可以从其他环境或备份进行数据恢复。
回页首
结束语
本文列举了一些 DB2 重定向恢复中经常出现的问题及解决办法,希望能帮助读者解决一些实际工作当中碰到的情况。
分享到:
评论

相关推荐

    db2 v9重定向恢复

    DB2 V9版本中的重定向恢复功能是一种高效的数据库恢复机制,它允许用户将数据恢复到与原始位置不同的新位置,这对于解决磁盘空间不足或数据损坏等问题非常有用。 #### 二、DB2 V9重定向恢复步骤详解 ##### 1. 使用...

    DB2重定向恢复.doc

    DB2 重定向恢复是一种高级恢复技术,用于在原始存储空间不足或无法使用时,将数据库的表空间恢复到其他位置。这种恢复方法允许你将数据库的备份数据从一...务必确保在执行恢复操作前仔细规划和测试,以避免潜在的问题。

    重定向操作db2数据库

    通过以上步骤和注意事项的详细介绍,我们可以了解到,在DB2数据库管理中,面对SQL2563W错误时,通过合理的重定向操作能够有效地解决恢复过程中出现的表空间位置不匹配问题,确保数据库恢复工作的顺利进行。

    DB2恢复删除表学习

    通过以上介绍,我们可以了解到DB2中关于删除表的恢复机制和具体操作流程。了解这些机制和限制有助于更好地管理数据库,减少数据丢失的风险。同时,根据实际情况灵活运用这些功能,可以有效提升数据库管理和维护的...

    windows下DB2数据库恢复

    #### 四、DB2 数据库备份与恢复的常见策略 - **定期备份**:根据业务需求和数据变化频率制定合理的备份计划,例如每日备份、每周备份等。 - **差异备份**:在全量备份的基础上,只备份自上次备份以来发生变化的数据...

    db2数据库备份和恢复

    1. **恢复前准备**:确保目标系统已安装有兼容版本的DB2,并有足够的磁盘空间存放恢复后的数据。 2. **恢复数据文件**:使用`db2 restore database`命令恢复数据文件。例如,`db2 restore database sample from e:\...

    DB2中常用备份,恢复命令和db2move,db2look的使用

    在IBM DB2数据库管理系统中,备份与恢复是确保数据安全性和业务连续性的关键操作。本文将深入探讨DB2中常用的备份、恢复命令以及db2move和db2look工具的使用方法,帮助数据库管理员掌握核心技能。 ### 常用备份与...

    DB2数据恢复与高可用性

    通过深入了解DB2的数据备份、复原和恢复技术,以及高可用性解决方案,数据库管理员可以有效地保护企业的关键数据资产,确保业务的连续性和稳定性。随着技术的发展,DB2不断引入新的功能和改进,为用户提供更加全面和...

    DB2常见问题

    【DB2常见问题详解】 DB2是IBM公司推出的一款关系型数据库管理系统,广泛应用于数据仓库、ETL(抽取、转换、加载)等场景。本文将深入解析DB2的相关知识点。 1. **DB2产品级别** - **企业版 (ENTERPRISE EDITION)...

    db2常见问题集锦

    本篇将基于"db2常见问题集锦"这一主题,深入探讨DB2管理和操作中常见的问题及其解决策略。 1. **安装与配置** - 问题:安装过程中出现依赖性错误。 - 解答:确保系统满足DB2的最低硬件和软件要求,安装时完整选择...

    db2数据库备份恢复实践总结

    本文档将详细介绍DB2中的几种常见备份和恢复方法,并通过具体的命令示例来展示这些方法的实际应用。 #### 二、脱机备份与恢复 脱机备份是指在数据库处于非活动状态时进行的数据备份,这种方式通常用于需要完整备份...

    《DB2中国》特刊电子杂志

    - **技术问答**: 电子杂志中还设立了一个“有问必答”栏目,邀请DB2专家解答读者提出的各种技术问题,这些问题涵盖了数据库设计、性能优化、故障诊断等多个方面,例如: - **DB2实例用户被误删除怎么办?** - **...

    DB2高可用与数据恢复与

    DB2 Version 9.5针对Linux、UNIX和Windows平台提供了全面的高可用性和数据恢复方案。通过采用冗余、故障转移、集群等多种技术手段,以及精细的日志管理机制,DB2能够有效保障数据的安全性和业务连续性。此外,DB2还...

    DB2数据恢复及高可用性指南与参考

    根据提供的标题、描述以及部分文档内容,我们可以提炼出关于“DB2数据恢复及高可用性”的一系列重要知识点。以下是对这些知识点的详细解读: ### 一、DB2数据恢复及高可用性的概述 DB2是一种高性能的关系型数据库...

    db2的备份和恢复.

    在DB2数据库管理系统中,备份和恢复是至关重要的操作,它们确保了数据的安全性和业务连续性。以下将详细解释DB2环境下创建数据库、备份数据库以及恢复数据库的步骤。 首先,我们来看创建数据库的过程: 1. **切换...

    无废话DB2备份和恢复-基础篇

    本文旨在详细介绍DB2备份和恢复的基础知识,帮助读者掌握这一领域的核心概念和技术要点。 #### 二、备份与恢复的目的 备份与恢复的主要目的是从各种类型的故障中恢复数据库系统,确保数据的有效保护。这包括但不...

    DB2异机恢复

    DB2 异机恢复 DB2 异机恢复是指使用 NetBackup 软件的备份实现 DB2 数据库的异机...DB2 异机恢复需要设置 DB2 Agent 配置、DB2 配置参数、备份脚本、db2.conf 文件和备份策略等多个方面,确保数据库的安全和可靠性。

    DB2数据库备份与恢复

    - **前滚至某个时间点**: 使用`db2 restore tablespace tblspc from directory_or_filename with rollforward at timestamp`命令恢复并前滚表空间到指定时间点。 #### 六、增量备份和恢复 增量备份仅备份自上次...

    db2常用命令和常见的错误处理

    根据提供的标题、描述以及部分代码内容,我们可以整理出关于DB2的一些基本操作命令及常见问题处理方法。以下是对这些知识点的详细阐述: ### DB2常用命令 #### 1. 连接到DB2数据库实例 - **命令**: `db2 connect ...

Global site tag (gtag.js) - Google Analytics