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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:41:42

developerWorks



数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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


数据库和表空间恢复

本节讨论 RESTORE 实用程序,该实用程序使用一个备份文件作为输入,输出是一个新的或已有的数据库。虽然我们讨论的是数据库恢复(recovery),但是我们使用的实用程序是 RESTORE,而不是 RECOVER。

要恢复到已有的数据库,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。要恢复到新的数据库,则需要 SYSADM 或 SYSCTRL 权限。

下面是 RESTORE 命令的语法:

RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN IMAGE]
   [EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name} .. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM directory] 
   [LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

让我们看一个例子。要执行 sample 数据库的恢复,可以使用以下命令:

(1)RESTORE DATABASE sample
(2)  FROM  C:\DBBACKUP
(3)  TAKEN AT 20060314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING

在上面的例子中:
  1. 表明要恢复的数据库镜像的名称。
  2. 指定要从中读取输入备份文件的位置。
  3. 如果该目录中有多个备份镜像,该选项将基于时间戳(备份名称的一部分)标识特定的备份。
  4. 如果一个数据库启用了归档日志记录,那么当该数据库被恢复时,它将自动被置于 rollforward pending 状态。这一行告诉 DB2 不要将该数据库置于 rollforward pending 状态。
  5. 当执行 RESTORE 时,您将看不到任何提示。

注意,以上语法中没有关键字 OFFLINE,因为这是默认模式。对于 RESTORE 实用程序,这是能用于数据库的惟一模式。

如果备份镜像中包括日志文件,那么可以使用 RESTORE DATABASE 命令的 LOGTARGET 选项恢复日志文件。

为了使用 C:\DBBACKUP 目录中的备份镜像恢复 SAMPLE 数据库,并将日志文件恢复到 C:\DB2\NODE0000\SQL00001\SQLOGDIR 目录,可以发出:

RESTORE DATABASE sample	
FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR	

也可以通过使用 LOGS 关键字只恢复日志文件,而不恢复数据库:

RESTORE DATABASE sample 
LOGS FROM C:\DBBACKUP
LOGTARGET C:\DB2\NODE0000\SQL00001\SQLOGDIR







可以使用完整数据库备份或表空间备份来恢复表空间。对于表空间恢复,要小心地做好计划,因为一不小心就会使数据处于不一致状态。

下面是表空间 RESTORE 命令的一个例子:

(1)  RESTORE DATABASE sample 
(2)  TABLESPACE ( mytblspace1 ) 
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2

在上面的例子中:
  1. 表明要恢复的数据库镜像。
  2. 表明这是表空间 RESTORE,并指定要恢复的表空间的名称。
  3. 表明这是在线恢复。对于用户表空间,在线恢复和离线恢复都是允许的。如前所述,对于数据库,只允许离线恢复。
  4. 指定输入备份文件所在的位置。

表空间被恢复之后,它总是 被置于 rollforward pending 状态。为了使表空间可以被访问,并重置这个状态,必须至少将表空间前滚一个最小的时间点。这个最小的时间点可以确保表空间和日志与系统编目中的信息一致。

考虑下面这个例子:

  1. 假设在时间 t1 上您做了一个完整数据库备份,其中包括表空间 mytbls1。
  2. 在时间 t2 上,您在表空间 mytbls1 中创建了表 myTable。这将为表空间 mytbs1 到 t2 的恢复设置最小时间点。
  3. 在时间 t3 上,您决定使用 t1 时做的完整数据库备份只恢复表空间 mytbls1。
  4. 恢复完成之后,表空间 mytbls1 将被置于 rollforward pending 状态。如果您可以前滚到最小时间点之前的一个时间点上,那么表空间 mytbls1 中将不包括表 myTable;然而,系统编目却说这个表的确在 mytbls1 中。为了避免出现这样的不一致,当您恢复一个表空间时,DB2 将强制使您至少前滚到最小时间点上。

当对表空间或表空间中的表运行 DDL 语句时,最小时间点将被更新。为了确定一个表空间的恢复的最小时间点,可以使用以下两种方法之一:

  • 使用 LIST TABLESPACES SHOW DETAIL 命令。
  • 使用 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获得表空间快照。

系统编目表空间(SYSCATSPACE)也必须前滚到日志的最后,并处于离线模式。在 数据库和表空间前滚 中我们将更详细地讨论 ROLLFORWARD 命令。







下图展示了如何从 Control Center 中调用 RESTORE 实用程序。要执行数据库或表空间恢复,可以在要恢复的数据库上单击右键,并选择 Restore。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #1

接下来这个图展示了执行 RESTORE 实用程序所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 RESTORE #2







还记得吗,增量备份是只包含自从执行前一个备份以来更新过的页的备份镜像。要使用增量备份来执行恢复,可以在 RESTORE DATBASE 命令上指定 INCREMENTAL 选项。通常,增量恢复会涉及到一系列的恢复操作。恢复中涉及的每个备份镜像必须按以下顺序进行恢复:最近一次,第一次,第二次,第三次,依此类推,直到最后一个镜像。

让我们看一个例子。下面是用于可恢复数据库 MYDB 的一个示例每周增量备份策略。它包括一个每周完整数据库备份操作、一个每日非累积(delta)备份操作和每周中期的累积(增量)备份操作:

1. (Sun) backup db mydb use tsm
2. (Mon) backup db mydb online incremental delta use tsm
3. (Tue) backup db mydb online incremental delta use tsm
4. (Wed) backup db mydb online incremental use tsm
5. (Thu) backup db mydb online incremental delta use tsm
6. (Fri) backup db mydb online incremental delta use tsm
7. (Sat) backup db mydb online incremental use tsm

为了使用星期五创建的增量备份恢复数据库,需要发出一系列的 RESTORE DATABASE 命令来恢复所需的每个镜像,顺序如下:

1. restore db mydb incremental taken at (Fri)
2. restore db mydb incremental taken at (Sun)
3. restore db mydb incremental taken at (Wed)
4. restore db mydb incremental taken at (Thu)
5. restore db mydb incremental taken at (Fri)

您可以看到,这个过程非常冗长,而且也容易出错。您必须知道要恢复的镜像是什么,还要知道以什么顺序恢复这些镜像。为了使这个过程变得更容易,可以使用自动增量恢复实用程序。为了执行自动增量恢复,只需识别出要恢复的最近的备份镜像,然后对它发出一个带 INCREMENTAL AUTOMATIC 选项的 RESTORE DATABASE 命令。恢复实用程序将负责剩下的事情。

上述所有手动恢复命令都可以放在一个自动增量恢复命令中:

restore db mydb incremental automatic taken at (Fri)







之前我们提到,备份文件包括关于表空间和容器的信息。如果在做备份时还存在的一个容器现在已经不存在了,会出现什么情况呢?如果 RESTORE 实用程序不能发现这个容器,那么就会碰到一个错误。

如果您不想在这个位置恢复备份,而是想在使用其他配置的其他地方恢复备份,又会如何呢?同样,这种情况下恢复备份会导致问题。

重定向恢复 可以解决这些问题。重定向恢复只需四个步骤就能恢复备份。它将:

  1. 获取输入备份中记录的关于容器和表空间的信息。这是通过在 RESTORE 命令中包括 REDIRECT 关键字来完成的。例如:
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP
         INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD
    

    下面是这个命令的输出:

    SQL1277W  A redirected restore operation is being performed.  Table space
    configuration can now be viewed and table spaces that do not use automatic
    storage can have their containers reconfigured.
    DB20000I  The RESTORE DATABASE command completed successfully.
    

  2. 从被(部分地)恢复的数据库 newdb 中查看表空间信息:
    LIST TABLESPACES SHOW DETAIL
    

  3. 为每个表空间设置新的容器。表空间有一个 ID,可以从 LIST TABLESPACES 命令的输出中获得。这个 ID 的用法如下:
    SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:\newdb\cat0.dat" 5000)
    SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:\newdb\cat1.dat" 5000)
    ...
    SET TABLESPACE CONTAINERS FOR n USING (PATH "d:\newdb2")
    

    其中 n 表示备份中某个表空间的 ID。注意,在重定向恢复中,不能改变表空间的类型。如果表空间是 SMS,就不能将它变为 DMS。

  4. 通过包括关键字 CONTINUE,开始将数据本身恢复到新的容器中,如下所示:
    RESTORE DATABASE DB2CERT CONTINUE
    

您已经看到了重定向恢复是如何工作的。它还可用于为 SMS 表空间添加容器。如果回顾本系列中的第二篇教程(见 参考资料),您应该知道,在大多数情况下,不能修改 SMS 表空间并为之添加一个容器。但是,重定向恢复可以绕过这个限制。

您不需要手动执行以上四个步骤,重定向实用程序允许通过带 REDIRECTGENERATE SCRIPT 选项发出 RESTORE 来生成一个重定向恢复脚本。当使用 GENERATE SCRIPT 选项时,恢复实用程序从备份镜像中提取容器信息,并生成一个 CLP 脚本,其中包括所有详细的容器信息。之后,您可以在这个脚本中修改任何路径或容器大小,还可以运行 CLP 脚本用一组新的容器重新创建数据库。

例如,要使用一个脚本来执行 DB2CERT 数据库的重定向恢复,可以遵循以下步骤:

  1. 使用恢复实用程序生成一个重定向恢复脚本。
    RESTORE DATABASE DB2CERT FROM C:\DBBACKUP INTO NEWDB REDIRECT GENERATE SCRIPT 
       NEWDB.CLP WITHOUT ROLLING FORWARD
           

    这样会创建一个名为 target-database-alias.clp 的重定向恢复脚本。在这个例子中就是 newdb.clp。

    newdb.clp 包含执行重定向恢复所需的所有命令。它还包含所有表空间信息。下面显示了 newdb.clp 脚本。

    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    UPDATE COMMAND OPTIONS USING S ON Z ON NEWDB_NODE0000.out V ON;
    SET CLIENT ATTACH_DBPARTITIONNUM  0;
    SET CLIENT CONNECT_DBPARTITIONNUM 0;
    -- *****************************************************************************
    -- ** automatically created redirect restore script
    -- *****************************************************************************
    RESTORE DATABASE DB2CERT
    -- USER  username
    -- USING 'password'
    FROM 'C:\dbbackup' TAKEN AT 20060516120102
    -- ON 'D:'
    -- DBPATH ON 'target-directory'
    INTO NEWDB
    -- NEWLOGPATH 'D:\DB2\NODE0000\SQL00001\SQLOGDIR\'
    -- WITH num-buff BUFFERS
    -- BUFFER buffer-size
    -- REPLACE HISTORY FILE
    -- REPLACE EXISTING REDIRECT
    -- PARALLELISM n WITHOUT ROLLING FORWARD
    -- WITHOUT PROMPTING
    ;
    -- *****************************************************************************
    -- ** table space definition
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = SYSCATSPACE
    -- **   Tablespace ID                            = 0
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Regular table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 4
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 16384
    -- **   Number of usable pages                   = 16380
    -- **   High water mark (pages)                  = 8872
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TEMPSPACE1
    -- **   Tablespace ID                            = 1
    -- **   Tablespace Type                          = System managed space
    -- **   Tablespace Content Type                  = System Temporary data
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = Yes
    -- **   Total number of pages                    = 1
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = USERSPACE1
    -- **   Tablespace ID                            = 2
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32 
    -- **   Using automatic storage                  = Yes
    -- **   Auto-resize enabled                      = Yes
    -- **   Total number of pages                    = 8192
    -- **   Number of usable pages                   = 8160
    -- **   High water mark (pages)                  = 1888
    -- *****************************************************************************
    -- *****************************************************************************
    -- ** Tablespace name                            = TBS1
    -- **   Tablespace ID                            = 5
    -- **   Tablespace Type                          = Database managed space
    -- **   Tablespace Content Type                  = All permanent data. Large table
                                                                   space.
    -- **   Tablespace Page size (bytes)             = 4096
    -- **   Tablespace Extent size (pages)           = 32
    -- **   Using automatic storage                  = No
    -- **   Auto-resize enabled                      = No
    -- **   Total number of pages                    = 1000
    -- **   Number of usable pages                   = 960
    -- **   High water mark (pages)                  = 96
    -- *****************************************************************************
    SET TABLESPACE CONTAINERS FOR 5
    -- IGNORE ROLLFORWARD CONTAINER OPERATIONS
    USING (
    FILE   'd:\DB2\DB2CERT\tbs1'      1000
    );
    -- ***************************************************************************** 
    -- ** start redirected restore
    -- ***************************************************************************** 
    RESTORE DATABASE NEWDB CONTINUE;
    -- *****************************************************************************
    -- ** end of file
    -- *****************************************************************************
    

    '--' 表明是注释。SET TABLESPACE CONTAINER 命令只是用于没有设置为使用自动存储的表空间。对于使用自动存储的表空间,它们的容器是由 DB2 自动处理的,因此不需要重新设置它们。

  2. 通过在文本编辑器中打开重定向恢复脚本,可以对其进行修改。您可以修改:
    • 恢复选项
    • 容器布局和路径
  3. 运行修改后的重定向恢复脚本。
    db2 -tvf newdb.clp
       

    这个脚本的输出将被写到一个名为 databasename_nodenumber.out 的文件中。

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