对于当今的全球业务而言,保持24x7的高数据可用性至关重要。 IBM DB2 UDB的挂起的I / O功能提供了具有连续系统可用性的联机拆分镜像接口,可以满足这一关键需求。 本文定义并解释了拆分镜像和挂起的I / O的关键概念,并提供了针对几种不同方案的分步说明。
我假设您对DB2有基本的了解(类似于IBM认证的DB2数据库管理员可能具有的知识),以便利用本文的技术细节。
什么是分割镜?
分割镜像是磁盘卷的相同,独立且即时的副本,可以将其附加到其他系统。 DB2 UDB数据库的拆分镜像是指一组相同,独立且瞬时的磁盘卷副本,这些副本包含其所有控制和数据文件,其中包括数据库目录的全部内容,所有表空间容器 , 本地数据库目录和活动日志目录 (如果它不在数据库目录中)。 仅需使用db2inidb
命令的snapshot
参数拆分活动日志目录才能创建克隆数据库。 其他两个参数, standby
和mirror
,不需要拆分活动日志目录。
访问拆分镜像不涉及复制。 它取决于存储供应商的实施。 用户必须使用存储供应商的设施来访问拆分镜像。 不应以任何其他方式访问它。
以下是对DB2 UDB数据库的拆分镜像内容的详细说明:
- 数据库目录:
创建数据库后,有关数据库的信息(包括默认信息)将存储在目录层次结构中。 分层目录结构是根据
db2 create database
命令中提供的信息在某个位置db2 create database
。 目录结构显示为“ <数据库路径> / <实例名称> / <节点名称> / SQLnnnnn /”。 在此结构中,名为SQLnnnnn的子目录称为数据库目录 。 该子目录的名称使用数据库令牌并表示数据库。 例如,SQL00001包含与第一个数据库关联的对象,而后继的数据库具有较高的编号:SQL00002,依此类推。数据库目录包含数据库控制文件(SQLBP.1,SQLBP.2,SQLSPCS.1,SQLSPCS.2,SQLSGF.1,SQLSGF.2,SQLDBCON,DB2RHIST.ASC,DB2TSCHNG.HIS,SQLOGCTL.LFH,SQLOGMIR.LFH和SQLINSLK),操作数据库所需的默认SMS表空间SQLT *子目录,默认日志路径SQLOGDIR子目录,自动统计信息收集和重组功能的SYSTOOLSPACE子目录以及默认事件监视器的DB2EVENT子目录。
通过
db2 list db directory on <database path>
命令db2 list db directory on <database path>
发出db2 list db directory on <database path>
可以轻松确定与数据库相对应的数据库目录。 - 本地数据库目录:
本地数据库目录位于定义数据库的每个路径(对于Windows,为“驱动器”)中。 目录结构显示为“ <数据库路径> / <实例名称> / <节点名称> / sqldbdir /”。 对于从该位置可访问的每个数据库,此目录包含一个条目。 使用拆分镜像解决方案时,建议在数据库路径中创建一个数据库,以便本地数据库目录(“ sqldbdir”)仅具有单个数据库的条目。
- 表空间容器:
所有不属于数据库目录的表空间容器都必须是拆分镜像的一部分。 可以使用
db2 list tablespaces
和db2 list tablespace containers for <tablespace-id>
命令找到有关表空间容器的信息。 - 活动日志目录:
日志文件的路径应仅包含在克隆数据库的拆分镜像中。 可以使用
db2 get db cfg for <database-alias>
命令找到有关当前活动日志目录的信息。
图1.拆分DB2 UDB数据库的镜像内容
暂停的I / O功能
拆分DB2 UDB数据库的镜像时,重要的是要确保在源数据库上不发生部分页面写入。 确保不进行部分页面写入的一种方法是使数据库脱机,这种状态在真正的24x7生产环境中绝对是不希望的。
为了在拆分镜像过程中提供连续的系统可用性,DB2 UDB提供了在源数据库上挂起I / O的功能,允许您在数据库仍处于联机状态时拆分镜像,而无需任何停机时间。
DB2 UDB的挂起的I / O功能通过挂起源数据库上的所有写活动,消除了部分页面写操作。 当数据库处于写挂起模式时,所有表空间都将置于“ 写挂起”状态(0x10000)。 但是,对数据库的所有操作均正常运行。
这是db2 list tablespaces
命令的样本输出,显示了表空间状态:
清单1.表空间状态显示写入已暂停
Tablespace ID = 0
Name = SYSCATSPACE
Type = System managed space
Contents = Any data
State = 0x10000
Detailed explanation:
Write Suspended
需要磁盘I / O的事务(例如从缓冲池中清除脏页或从日志缓冲区中清除日志)可能会等待。 但是,一旦恢复了对源数据库的写操作,这些事务将正常进行。
使用挂起的I / O功能创建的拆分镜像将保持“写入挂起”状态,直到由DB2使用db2inidb
命令对其进行初始化为止。 db2inidb
命令提供了以三种不同方式(克隆,备用或镜像)初始化拆分镜像的选项,从而使用户可以满足其使用的各种目标。