DB2 9 数据库管理(731考试)认证指南,第 7 部分: 高可用性:镜像分割与高可用性灾难恢复

Michael Dang (dangm@ca.ibm.com), DB2 数据库管理员, EMC
Sylvia Qi (sylviaq@ca.ibm.com), WebSphere Application Server 功能验证测试人员, IBM 多伦多实验室

简介:  本教程是 共分 7 部分的系列教程 中的最后一篇教程,本系列能帮助您备考 DB2® 9 for Linux®, UNIX®, and Windows™ Database Administration(考试 731)。本教程主要谈论两个高级高可用性话题:分割镜像和高可用性灾难恢复(HADR)。通过分割镜像,可以使用磁盘备份恢复数据库。而 HADR 则提供了故障转移(failover)支持,这类似于 HACMP 和 Microsoft™ Cluster Server 提供的故障转移功能。

查看本系列更多内容

发布日期:  2006 年 8 月 17 日
级别: 中级

访问情况 : 7223 次浏览
评论: 0 (添加评论)

平均分 (共 3 个评分 )

通过在线分割镜像和暂挂 I/O 支持获得高可用性

分割镜像和暂挂 I/O

在备份和恢复教程中您了解到,在线备份使用户在对数据库进行备份的同时维护与数据库的连接。

虽然这符合高可用性系统的标准,但是对于大型数据库而言,这个过程可能比较费时间。而另一种备份恢复策略则比在线备份更快一些,这种策略就是分割镜像。

如果使用分割镜像,则不需要使用 DB2 备份实用程序对数据库进行备份,只需为数据库目录做一份磁盘拷贝,然后在需要的时候恢复这个磁盘拷贝。相对于传统的数据库备份恢复方法,这个过程有以下优点:

  • 省去了主机器上的备份操作的开销,如果数据库比较大,那么这种备份操作是很费时间的。
  • 使用分割镜像的恢复过程比使用恢复实用程序更快。

分割镜像

分割一个镜像 的意思是通过将数据写到硬盘上,为源数据库创建一个 “瞬时” 拷贝。必要时,可以使用这个磁盘拷贝来克隆一个新的但是是相同的数据库,或者使用它来作为恢复原始数据库的一个备份拷贝。

您所选择的分割镜像的方法不受 DB2 的控制。只要您愿意,就可以为数据库目录做一个文件系统拷贝。建议使用任何智能存储设备,例如 IBM Enterprise Storage Server (ESS),也称 Shark 和 EMC Symmetrix 3330。通过使用 FlashCopy 技术,ESS 可以完全独立地为数据建立近乎瞬时的拷贝。Symmetrix 上的 EMC TimeFinder 软件的这种瞬时分割特性还可以用类似的方式分割一个镜像拷贝。

一个数据库的分割镜像包括数据库目录中的所有内容、所有表空间容器和本地数据库目录。取决于您想如何使用分割镜像,必要时还可以在分割镜像中包括活动日志目录。后面有关于这个话题的更多介绍。

暂挂 I/O

在分割一个镜像时,应确保数据库上没有写页操作。DB2 暂挂 I/O 支持让您可以在不必关闭数据库的情况下执行分割镜像操作。其思想是在分割镜像之前,使数据库处于 write suspend 模式,在完成分割之后,再恢复正常的 I/O 活动。

当数据库处在 write suspended 模式时,其中的所有表空间都被置于 SUSPEND_WRITE 状态。所有操作都继续正常进行。但是,有些事务如果需要进行磁盘 I/O,那么可能需要等待。一旦数据库上的写操作得到恢复,这些事务便可以继续正常执行。

下面的命令用于暂挂和恢复数据库上的写操作:

要暂挂写操作,可以发出:

CONNECT TO database-alias
SET WRITE SUSPEND FOR DATABASE

要恢复写操作,可以发出:

SET WRITE RESUME FOR DATABASE

db2inidb 工具

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 RESTORE DATABASE 命令来恢复数据库,因为这不是 DB2 数据库备份。它只是数据库文件的一个磁盘拷贝。要将这个磁盘拷贝初始化到一个可用的 DB2 数据库中,可以使用 db2inidb 命令:

DB2INIDB database-alias 
AS {SNAPSHOT | STANDBY | MIRROR}
[RELOCATE USING config_file]

可以用三种不同的方式初始化镜像:

  • Snapshot:创建源数据库的一个克隆。
  • Standby:创建一个备用数据库。
  • Mirror:恢复原始的源数据库。

不管是 Snapshot 还是 Standby 选项,都是使用镜像创建一个新的、但是与源数据库相同的数据库。因此,分割镜像数据库与源数据库不能在同一个系统上,因为它具有与源数据库相同的结构,并且使用与源数据库相同的实例名。如果分割镜像数据库必须与源数据库在同一个系统上,那么需要在发出 db2inidb 命令时指定 RELOCATE USING 配置文件选项。

relocate 配置文件(文本文件)的格式如下。使用这个配置文件来重新安置数据库目录结构:

DB_NAME=oldName,newName
DB_PATH=oldPath,newPath
INSTANCE=oldInst,newInst
NODENUM=nodeNumber
LOG_DIR=oldDirPath,newDirPath
CONT_PATH=oldContPath1,newContPath1
CONT_PATH=oldContPath2,newContPath2

回页首

使用 db2inidb snapshot 选项克隆数据库

这个选项在 I/O 被暂挂时创建源数据库的一个瞬时拷贝。因此被称作 snapshot。在初始化过程中,分割镜像数据库先通过一次紧急事故恢复。在紧急事故恢复完成之后,数据库便可以立即使用了。在分割镜像时任何未提交的工作都被回滚。

使用 db2inidb snapshot 选项创建克隆数据库的步骤是:

  1. 暂挂源数据库上的 I/O:

    CONNECT TO source-database-alias 
    SET WRITE SUSPEND FOR DATABASE
    
  2. 分割镜像。为了分割镜像,可以使用文件系统复制方法或前面提到的任何供应商产品。如果选择使用一种供应商产品,那么应参阅适用于您的设备的文档,了解如何创建分割镜像。无论分割镜像的过程如何不同,下面这些都是需要同时分割镜像的:
    • 数据库目录的整个内容。
    • 所有表空间容器。
    • 本地数据库目录。
    • 如果活动日志目录不在数据库目录中,则还包括活动日志目录。

    上述所有信息都存储在系统视图 SYSADM.DBPATHS 中。通过运行 select * from sysadm.dbpaths 语句可以获得这些信息。还可以从 Control Center 中查看该视图的内容。下图展示了这个视图的示例内容:

    图 2. SYSADM.DBPATHS 视图

    SYSADM.DBPATHS 视图提供以下信息:

    • 数据库目录是 C:\DB2\NODE0000\SQL00001。
    • 表空间容器路径是 c:\db2\test1\userspace3 and c:\db2\test1\userspace2。
    • 本地数据库目录是 C:\DB2\NODE0000\SQLDBDIR (图中没有显示,但是本地数据库目录是 SQLDBDIR 目录,与数据库目录在同一级)。
    • 活动日志目录是 C:\DB2\NODE0000\SQL00001\SQLOGDIR。

    所有这些目录都必须被分割镜像。

  3. 恢复源数据库上的 I/O。发出以下命令来恢复源数据库上的 I/O 活动。当发出以下命令时,使用与步骤 1 相同的连接会话:
    SET WRITE RESUME FOR DATABASE
    
  4. 使分割镜像可以被访问:
    1. 在目标机器上,创建与源机器上的 DB2 实例相同的 DB2 实例。
    2. 将步骤 2 中获得的分割镜像恢复到与在源机器上位置相同的路径中。如果分割镜像在一个网络驱动器中,那么将网络驱动器挂载到目标机器。
    3. 运行以下命令编目目标机器上的数据库:
      CATALOG DATABASE database-name AS database-alias ON path

      其中:

      database-alias 必须与源数据库的别名匹配。

      path 必须与源数据库的数据库路径匹配(使用 LIST DB DIRECTORY 命令显示数据库路径,或检查 SYSADM.DBPATHS 视图中的 DB_STORAGE_PATH 字段,如图 2 所示)。

  5. 将分割镜像数据库初始化为一个克隆数据库
    1. 使用 db2start 命令启动目标机器上的实例。
    2. 使用 snapshot 选项初始化分割镜像数据库:
      DB2INIDB database-alias AS SNAPSHOT
      

      前面的 db2inidb 命令开始一个紧急事故恢复,这个过程将回滚分割镜像时所有未提交的事务,从而使数据库一致。重要的是要有在分割镜像时源机器的活动日志文件。活动日志目录必须不包含不属于分割镜像的任何日志文件。紧急事故恢复完成之后,数据库就可以使用了。

      图 3 总结了使用 snapshot 选项分割镜像的过程:

      图 3. 使用 snapshot 选项分割镜像

回页首

使用 db2inidb standby 选项创建备用数据库

db2inidb standby 选项创建源数据库(也称主数据库)的一个备用数据库。

当一个分割镜像被初始化为备用数据库时,它被立即置于 rollforward pending 状态。主数据库上一出现可用的不活动日志文件,便立即应用这些日志文件,通过不断地应用来自主数据库的日志文件,使备用数据库跟上主数据库的变化。这里使用前面讨论的日志传送方法使日志可以被备用数据库使用。如果主数据库上出现故障,则使用备用数据库接管主数据库的角色。

使用 db2inidb standby 选项创建备用数据库的步骤如下:

  1. 暂挂主数据库上的 I/O。遵循与 snapshot 场景中相同的步骤来暂挂主数据库上的 I/O。
  2. 分割镜像。使用适当的方法为主数据库建立分割镜像。分割镜像必须包含:
    • 数据库目录中的所有内容。
    • 所有表空间容器。
    • 本地数据库目录。

    在这个场景中,您不需要分割活动日志目录。后面会讨论如何处理日志。

  3. 恢复源数据库上的 I/O。遵循与 snapshot 场景中相同的步骤来恢复主数据库上的 I/O。
  4. 使分割镜像可以被访问。遵循与 snapshot 场景中相同的步骤来使分割镜像可以被访问。
  5. 将分割镜像数据库初始化为备用数据库。

    下面的命令初始化数据库,并使之处于 rollforward pending 状态,以便应用来自主数据库的日志。

    DB2INIDB database-alias AS STANDBY
    
  6. 不断使用 ROLLFORWARD DATABASE 命令,将主数据库归档的日志应用到备用数据库。为了使备用数据库尽可能跟上变化,一旦主数据库出现新的不活动日志文件(已经被归档的日志),便立即应用它们,这样不断地应用日志文件。为此,可以在备用数据库上发出 ROLLFORWARD DATABASE 命令,发出该命令时不必使用 STOP 或 COMPLETE 选项。

    为了使日志文件可以被备用数据库访问,使用 设置日志传送 中讨论的日志传送方法。

    使用 ROLLFORWARD DATABASE 命令不断地将归档日志应用到备用数据库:

    ROLLFORWARD DB database-alias TO END OF LOGS
    
  7. 使备用数据库上线。

    当主数据库上出现故障时,您希望使备用数据库切换至上线状态,从而接管主数据库的角色。为了使备用数据库上线,可以执行以下步骤:

    1. 使活动日志路径可以被备用数据库访问。在步骤 6 中,您只是将主数据库产生的归档日志应用到备用数据库。您没有应用活动日志。当做好使备用数据库上线的准备时,需要从主数据库获取活动日志,并将它们应用到备用数据库上。这个获取过程可以手动完成,也就是说,将活动日志从主数据库复制到备用服务器的 logpath 目录。
    2. 将数据库前滚到日志的最后并停止:
      ROLLFORWARD DB database-alias TO END OF LOGS AND STOP
      

      当前滚过程完成之后,数据库便可以使用了。

      下图总结了使用 standby 选项分割镜像的过程:

      图 4. 使用 standby 选项分割镜像

回页首

使用 db2inidb mirror 选项创建源数据库的备份镜像

db2inidb 命令的 mirror 选项用于创建源数据库的一个快速镜像文件备份。分割镜像可用于在需要时恢复源数据库。因此可以直接使用这个过程,而不需要在源数据库上执行备份和恢复操作。

使用 db2inidb mirror 选项创建源数据库的备份镜像的步骤如下:

  1. 暂挂源数据库上的 I/O。遵循与 snapshot 场景中相同的步骤来暂挂源数据库上的 I/O。
  2. 分割镜像。使用适当的方法为源数据库分割镜像。分割镜像必须包括:
    • 数据库目录的所有内容。
    • 所有表空间容器。
    • 本地数据库目录。

    在这个场景中,不需要分割活动日志目录。

  3. 恢复源数据库上的 I/O。遵循与 snapshot 场景中相同的步骤来恢复源数据库上的 I/O。
  4. 使用分割镜像恢复源数据库。在这个场景中没有 “目标” 数据库。mirror 选项的作用是在需要的时候使用镜像拷贝来恢复源数据库。
    1. 使用 db2stop 命令停止实例。
    2. 将分割镜像数据库的数据文件复制到源数据库。
    3. 使用 db2start 命令启动实例。
    4. 发出以下命令初始化分割镜像数据库。该命令用分割镜像取代源数据库,并将它置于 rollforward pending 状态,以便再次应用日志。
      DB2INIDB database-alias AS MIRROR
      
    5. 将数据库前滚到日志的最后。当前滚过程完成之后,数据库就可以使用了。
      ROLLFORWARD DB database-alias TO END OF LOGS AND STOP
      

    图 5 总结了使用 mirror 选项的分割镜像过程:

    图 5. 使用 mirror 选项分割镜像

回页首

在分区环境中分割镜像

在分区数据库环境中,在分割镜像过程中要暂挂每个分区上的 I/O。之后再恢复每个分区上的 I/O。这同样适用于 db2inidb 工具,该工具必须在每个被分割镜像的分区上运行,以初始化数据库。

由于每个分区是独立对待的,因此可以单独暂挂某个分区,而不影响其他分区的使用。这意味着不需要发出 db2_all 来暂挂所有分区的 I/O。如果每个分区都要单独暂挂,那么应该最后暂挂编目分区。这是因为要暂挂任何非编目节点上的 I/O,都必须要有到编目分区的连接,以得到授权。如果编目分区被暂挂,那么连接尝试将挂起。

db2inidb 工具不要求到数据库的任何连接。因此,可以在每个分割镜像上独立地运行该工具,或者使用 db2_all 在所有分区上同时运行该工具。惟一的要求是要启动数据库管理器。

假设一个数据库包含三个分区,分别为分区 0、1 和 2,其中分区 0 为编目分区,那么,为了暂挂该数据库上的写操作,可以发出以下命令:

export DB2NODE=1
db2 terminate
db2 connect to database-alias
db2 set write suspend for databaseexport DB2NODE=2
db2 terminate
db2 connect to database-alias
db2 set write suspend for databaseexport DB2NODE=0
db2 terminate
db2 connect to database-alias
db2 set write suspend for database

为了在所有分区上同时运行 db2inidb,可以发出:

db2_all "db2inidb database-alias as db2inidb-option"
==========================================================================================
镜像分割注意
一定要是设置了   SET WRITE SUSPEND FOR DATABASE
然后进行拷贝的才算是 a split mirror image

拷贝之再改回去就好了    SET WRITE RESUME FOR DATABASE
***********************************************************************************************************
[db2inst1@oc5603811686 test]$ db2inidb test as snapshot
DBT1008N  Database "TEST" is not a split mirror image.
[db2inst1@oc5603811686 test]$ db2 ? dbt1008n

DBT1008N  Database "<database-name>" is not a split mirror image.

Explanation:

An attempt was made to use the DB2INIDB tool on a database that is not a
split mirror image.

A split mirror image is a mirrored copy of a database that is taken
while I/O writes are suspended. I/O writes can be suspended using the
following command while being connected to the database:

SET WRITE SUSPEND FOR DATABASE

Once the split mirror image has been taken, I/O writes on the primary
database can be resumed with the following command:

SET WRITE RESUME FOR DATABASE

Before the split mirror image can be used, the DB2INIDB tool must be run
in order to remove its suspended state and initialize it by either
performing crash recovery or placing it in rollforward pending state.

User response:

Resubmit the command using a split mirror image database.


******************************************************************************************************************

转载于:https://www.cnblogs.com/jackhub/archive/2013/04/13/3147192.html

镜像分割与高可用性灾难恢复相关推荐

  1. DB2高可用性灾难恢复

    DB2 HADR概述 High Availability Disaster Recovery (HADR)是数据库级别的高可用性数据复制机制,最初被应用于Informix数据库系统中,称为High A ...

  2. [SCM]源码管理 - perforce的集中授权+分布式团队+负载均衡+可扩展性+高可用性+灾难恢复...

    本文主要讨论perforce的 * perforce集中授权 * perforce对分布式团队的支持 * perforce的负载均衡​和可扩展性 * perforce高可用性和灾难恢复 一 perfo ...

  3. DB2数据库认证系列教程——IBM DB2认证考前必备

    DB2数据库认证系列教程--IBM DB2认证考前必备 IBM DB2认证 IBM DB2 认证是求职的敲门砖,也是很多 DB2 爱好者热衷追求的目标.本专题收集整理了IBM DB 2数据库认证相关的 ...

  4. 什么是SQL Server数据库镜像?

    principal, while the other is a mirrored instance called the 原则上 ,而另一种是所谓的mirror. In special cases, ...

  5. SQL Server 数据库镜像

    文章目录 故障转移群集技术 vs 日志传送技术 数据库镜像 vs 故障转移群集技术 数据库镜像 vs 日志传送技术 数据库镜像的设计目的 2.4.1 数据库镜像的基本概念 基本术语和角色 镜像数据库的 ...

  6. CVPR2021|深度感知镜面分割方法(RGBD数据)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨 泡泡机器人SLAM 编辑丨3D视觉工坊 标题:Depth-Awar ...

  7. 数据库集群技术(转载)

    用来保存计算最终结果的 数据库是整个信息系统的重要组成部分, 技术也相对成熟.然而,对于所有数据库而言,除了记录正确的 处理结果之外,也面临着一些挑战:如何提高处理速度,数据可用性.数据安全性和数据集 ...

  8. oracle与DB2

    1.体系结构,DB2的实例和数据库分开的做法,我个人还是比较喜欢的,因为实例可以创建多个,数据库的恢复直接恢复到实例下就可以了,相对ORACLE简单多了. 2.管理工具,DB2的管理工具做得太简陋了, ...

  9. ceph nautilus相对于minic的主要改动

    改动信息 详情可以查看ceph官网nautilus Dashboard功能 增加的新功能 支持多用户 使用SSO的用户验证模式 支持审计模式 新的登录页,可以展示更多的集群健康指标 使用swagger ...

  10. SQL Server 高可用方案

    SQL Server 高可用方案 方案一:Asynchronous Mirror + Alias 方案介绍 数据库服务器配置异步镜像关系,程序客户端连接串配置别名连接. 1. 在SQL Server客 ...

最新文章

  1. cmd无法输出java结果_cmd中执行java命令没有输出结果
  2. Java面对面向程序设计_语言与文化网课章节测试答案
  3. 五十六、TodoList的三种写法,祭奠我的前端之路
  4. 【教程】Jupyter notebook基本使用教程
  5. 使用verilog设计实现QR分解
  6. AutoCAD.NET API 最新(2012)教程下载及在线视频教程DevTV
  7. Unity手游之路三 基于Unity+Java的聊天室源码
  8. 微软开源用于大规模查找并修复漏洞的开发者工具 Project OneFuzz 框架
  9. (原創) 如何為Blog加上簡體中文(繁體中文)翻譯? (Web) (CSS) (JavaScript)
  10. 最长公共子串_两个字符串的最长公共子串(后缀自动机)
  11. 运维讨厌流浪地球的原因
  12. VPP电源控制(VPP Power)-- 由DC-DC变换集成电路MC34063组成
  13. The type XXX is not API (restriction on required library 'D:\jdk-64\jre\lib\rt.jar')
  14. Py之Scipy:Scipy库(高级科学计算库)的简介、安装、使用方法之详细攻略
  15. HUSTOJ安装记录
  16. 清除壁垒 大数据推动城市规划质突破
  17. 沉睡者IT - 月赚几千的创业项目思路,抖音文案号网赚项目
  18. ELI'S CURIOUS MIND
  19. 实数取整(指针专题)
  20. 钰泰半导体ETA4034带OVP+OCP+NTC+带Fault功能,*耐压32V兼容BQ24314

热门文章

  1. [C#] Microsoft .Net框架SerialPort类的用法与示例
  2. Thinking in Java 14.3.3递归计数
  3. SqlServer获取数据表字段自定义编号
  4. 36. Never redifine an inherited non-virtual function
  5. DBCP与C3P0连接池组件
  6. Centos7---1708 Linux上安装ZooKeeper 以及JDK1.8安装
  7. docker数据卷之dockerfile
  8. iis 运行时错误_新手必看,17个常见的Python运行时错误
  9. license授权什么意思_微信公众号的scope权限什么意思
  10. jQuery:设置body的背景