Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103616176
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616177
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616178
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616179
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616180
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616181
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616182
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616183
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616174
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616185
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616186
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616187
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616188
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616189
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616190
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616191
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616192
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616193
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616194
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616195
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616196
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616197
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616198
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616189
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616200
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616201
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616202
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616203
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616204
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616205
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616206
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616207
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616208
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616209
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616210
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616211
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616212
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616213
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616204
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616215
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616216
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616217
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616218
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616219
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616220
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616221
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616222
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616223
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616224
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616225
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616226
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks

DB2 9数据库管理(731考试)认证指南,第7部分: 高可用性:镜像分割与高可用性灾难恢复(4)-sdccf-ChinaUnix博客
  • 博客访问: 103616227
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:48:16

developerWorks



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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40078) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40077) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40076) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40075) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40074) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40073) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40072) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40071) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40070) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40069) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40068) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40067) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40066) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40065) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40064) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40063) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40062) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40061) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40060) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40059) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40058) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40057) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40056) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40055) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40054) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40053) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40052) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40051) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40050) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40049) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40048) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40047) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40046) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40045) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40044) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40043) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40042) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40041) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40040) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40039) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40038) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40037) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40036) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40035) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40034) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40033) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40032) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40031) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40030) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40029) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40028) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


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

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

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

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

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

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

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

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

在分割一个镜像时,应确保数据库上没有写页操作。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

现在您有了源数据库的一个镜像,它基本上就是一个磁盘拷贝。但是您不能在这个磁盘拷贝上使用 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







这个选项在 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 中查看该视图的内容。下图展示了这个视图的示例内容:




    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 选项分割镜像的过程:




      使用 snapshot 选项分割镜像







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 选项分割镜像的过程:




      使用 standby 选项分割镜像







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 选项的分割镜像过程:




    使用 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 database

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

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

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

db2_all "db2inidb database-alias as db2inidb-option"

阅读(40027) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~