Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101927972
  • 博文数量: 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博客
  • 博客访问: 101927973
  • 博文数量: 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博客
  • 博客访问: 101927974
  • 博文数量: 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博客
  • 博客访问: 101927975
  • 博文数量: 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博客
  • 博客访问: 101927976
  • 博文数量: 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博客
  • 博客访问: 101927977
  • 博文数量: 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博客
  • 博客访问: 101927978
  • 博文数量: 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博客
  • 博客访问: 101927969
  • 博文数量: 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博客
  • 博客访问: 101927980
  • 博文数量: 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博客
  • 博客访问: 101927982
  • 博文数量: 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博客
  • 博客访问: 101927984
  • 博文数量: 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博客
  • 博客访问: 101927986
  • 博文数量: 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博客
  • 博客访问: 101927988
  • 博文数量: 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博客
  • 博客访问: 101927990
  • 博文数量: 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博客
  • 博客访问: 101927992
  • 博文数量: 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博客
  • 博客访问: 101927984
  • 博文数量: 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博客
  • 博客访问: 101927995
  • 博文数量: 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博客
  • 博客访问: 101927997
  • 博文数量: 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博客
  • 博客访问: 101927999
  • 博文数量: 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博客
  • 博客访问: 101928001
  • 博文数量: 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博客
  • 博客访问: 101928002
  • 博文数量: 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博客
  • 博客访问: 101928004
  • 博文数量: 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博客
  • 博客访问: 101928006
  • 博文数量: 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博客
  • 博客访问: 101928007
  • 博文数量: 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博客
  • 博客访问: 101927999
  • 博文数量: 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博客
  • 博客访问: 101928011
  • 博文数量: 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博客
  • 博客访问: 101928012
  • 博文数量: 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博客
  • 博客访问: 101928014
  • 博文数量: 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博客
  • 博客访问: 101928016
  • 博文数量: 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博客
  • 博客访问: 101928018
  • 博文数量: 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博客
  • 博客访问: 101928020
  • 博文数量: 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博客
  • 博客访问: 101928022
  • 博文数量: 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博客
  • 博客访问: 101928014
  • 博文数量: 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博客
  • 博客访问: 101928026
  • 博文数量: 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博客
  • 博客访问: 101928028
  • 博文数量: 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博客
  • 博客访问: 101928030
  • 博文数量: 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博客
  • 博客访问: 101928032
  • 博文数量: 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博客
  • 博客访问: 101928034
  • 博文数量: 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博客
  • 博客访问: 101928037
  • 博文数量: 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博客
  • 博客访问: 101928029
  • 博文数量: 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博客
  • 博客访问: 101928041
  • 博文数量: 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博客
  • 博客访问: 101928043
  • 博文数量: 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博客
  • 博客访问: 101928045
  • 博文数量: 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博客
  • 博客访问: 101928047
  • 博文数量: 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博客
  • 博客访问: 101928049
  • 博文数量: 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博客
  • 博客访问: 101928051
  • 博文数量: 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博客
  • 博客访问: 101928053
  • 博文数量: 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博客
  • 博客访问: 101928040
  • 博文数量: 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博客
  • 博客访问: 101928057
  • 博文数量: 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博客
  • 博客访问: 101928060
  • 博文数量: 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博客
  • 博客访问: 101928062
  • 博文数量: 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博客
  • 博客访问: 101928064
  • 博文数量: 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"

阅读(39817) | 评论(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"

阅读(39816) | 评论(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"

阅读(39815) | 评论(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"

阅读(39814) | 评论(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"

阅读(39813) | 评论(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"

阅读(39812) | 评论(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"

阅读(39811) | 评论(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"

阅读(39810) | 评论(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"

阅读(39809) | 评论(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"

阅读(39808) | 评论(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"

阅读(39807) | 评论(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"

阅读(39806) | 评论(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"

阅读(39805) | 评论(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"

阅读(39804) | 评论(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"

阅读(39803) | 评论(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"

阅读(39802) | 评论(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"

阅读(39801) | 评论(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"

阅读(39800) | 评论(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"

阅读(39799) | 评论(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"

阅读(39798) | 评论(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"

阅读(39797) | 评论(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"

阅读(39796) | 评论(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"

阅读(39795) | 评论(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"

阅读(39794) | 评论(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"

阅读(39793) | 评论(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"

阅读(39792) | 评论(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"

阅读(39791) | 评论(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"

阅读(39790) | 评论(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"

阅读(39789) | 评论(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"

阅读(39788) | 评论(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"

阅读(39787) | 评论(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"

阅读(39786) | 评论(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"

阅读(39785) | 评论(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"

阅读(39784) | 评论(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"

阅读(39783) | 评论(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"

阅读(39782) | 评论(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"

阅读(39781) | 评论(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"

阅读(39780) | 评论(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"

阅读(39779) | 评论(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"

阅读(39778) | 评论(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"

阅读(39777) | 评论(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"

阅读(39776) | 评论(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"

阅读(39775) | 评论(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"

阅读(39774) | 评论(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"

阅读(39773) | 评论(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"

阅读(39772) | 评论(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"

阅读(39771) | 评论(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"

阅读(39770) | 评论(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"

阅读(39769) | 评论(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"

阅读(39768) | 评论(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"

阅读(39767) | 评论(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"

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