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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks

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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-13 14:42:21

developerWorks



数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21567) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21566) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21565) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21564) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21563) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21562) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21561) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21560) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21559) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21558) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21557) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21556) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21555) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21554) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21553) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21552) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21551) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21550) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21549) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21548) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21547) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21546) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21545) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21544) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21543) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21542) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21541) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21540) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21539) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21538) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21537) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21536) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21535) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21534) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21533) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21532) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21531) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21530) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21529) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21528) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21527) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21526) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21525) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21524) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21523) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21522) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21521) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21520) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21519) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21518) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21517) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


数据库和表空间前滚

ROLLFORWARD 命令允许时间点恢复,即该命令允许遍历 DB2 日志,将日志中记录的操作重新执行或撤销到一个指定的时间点。虽然可以将数据库或表空间前滚到最小时间点之后的任何时间点,但是不能保证前滚到那个时间后所有数据都处于一致状态。

虽然本教程不讨论 QUIESCE 命令,不过值得一提的是,可以使用这个命令在常规数据库操作期间设置一致点。通过设置这些一致点,总可以使时间点恢复达到任何一个一致点,从而保证数据同步。

一致点和很多其他信息一起存储在 DB2 历史文件中,这个文件可以使用 LIST HISTORY 命令来查看。

在前滚处理期间,DB2 将:

  1. 在当前日志路径中查找所需的日志文件。
  2. 如果找到了日志文件,则应用该日志文件中的事务。
  3. 如果在当前日志路径中没有发现那个日志文件,则搜索 OVERFLOW LOG PATH 选项指定的路径,并使用那个位置的日志文件。
  4. 如果在当前路径中没有发现那个日志文件,并且没有使用 OVERFLOW LOG PATH 选项,则使用 LOGARCHMETH1 中指定的方法从归档路径中获取日志文件。
  5. 如果该日志在当前日志路径或 OVERFLOW LOG PATH 中,则重新应用事务。

要执行 ROLLFORWARD 命令,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

ROLLFORWARD 命令的语法如下:

ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME | USING UTC TIME] |
END OF LOGS [On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME | USING UTC TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}

我们来看一个例子。要执行 sample 数据库的前滚,可以使用以下任何语句:

(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE

从上面的代码中:
  1. 在这个例子中,我们将前滚到日志的最后,这意味着所有归档的日志和活动日志都将被遍历。最后,它将完成前滚,并通过回滚任何未提交的事务来脱离 rollforward-pending 状态。
  2. 对于这个例子,DB2 将前滚到指定的时间点。使用的时间戳必须是 CUT(标准世界时),这个时间可以通过将当前时区减去当地时间计算出来。
  3. 这个例子类似于前一个例子,但是时间戳可以用当地时间表示。

语法中没有关键字 OFFLINE,因为这是默认模式。对于 ROLLFORWARD 命令,这是可用于数据库的惟一模式。







表空间前滚通常可以在线进行或者离线进行。一个例外就是系统编目表空间(SYSCATSPACE),这种表空间只能离线前滚。

下面是一个示例表空间前滚:

ROLLFORWARD DATABASE sample 
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE

在 “数据库前滚” 小节中解释了这个例子中的选项。这里惟一没有解释过的是 TABLESPACE 选项,该选项指定要前滚的表空间。

如果启用了注册表变量 DB2_COLLECT_TS_REC_INFO,那么只需处理恢复表空间所需的日志文件。ROLLFORWARD 命令将忽略不需要的日志文件,这样可以加快恢复。

ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出:

  • DB2 已经前滚的日志文件。
  • 需要的下一个归档日志文件。
  • 自前滚处理开始以来最近提交的事务的时间戳。
例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME

在一个表空间时间点前滚操作完成之后,表空间被置于 backup-pending 状态。这里必须使用表空间或数据库的备份,因为在表空间所恢复到的时间点与当前时间之间对表空间的更改已经丢失。







下图展示了如何从 Control Center 中调用 ROLLFORWARD 命令。要执行一个数据库前滚或表空间前滚,可以在要前滚的数据库上单击右键并选择 Roll-forward。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #1

下图展示了执行 ROLLFORWARD 命令所需的一些选项。我们鼓励您亲自尝试一下。

从 Control center 中调用 ROLLFORWARD #2







到目前为止,我们讨论了 BACKUPRESTOREROLLFORWARD 命令。下图展示了您现在应该理解的不同类型的恢复。

紧急事故恢复

对于这个场景,循环日志记录在生效:

在 t6,在构建中出现了一个计划外的停电事故。在 t7,DB2 被重新启动,当连接到数据库时,紧急事故恢复自动启动(假设 db cfg AUTORESTART 为 ON;否则,需要用 RESTART DATABASE 命令手动地启动它)。紧急事故恢复将遍历活动日志,并重新执行提交的事务。如果一个事务还没有被提交,它将回滚(撤销)。对于这个例子,两个插入将重新执行,而删除语句将撤销。

版本恢复

对于这个场景,循环日志记录在生效:

在 t7,您意识到所有表空间中的数据已经被 t6 时启动的某个事务毁坏。在 t8,您决定使用 t1 时做的完整数据库备份进行恢复。由于循环日志记录在生效,日志中很多已提交和具体化的事务已经被覆盖。因此,不能应用日志(不能在循环日志记录中运行 ROLLFORWARD 命令,所以甚至不能前滚活动日志)。结果是:t2 至 t4 这段时间内很多好的事务将丢失。

前滚恢复

对于这个场景,归档日志记录在生效:

这是前一个场景的一个扩展。在这个例子中,日志已经被保存(归档日志);在 t8 应用完整数据库恢复之后,可以将日志前滚到 t9。日志可以从 t1 前滚到任意时间点,但是您很可能不想超过 t6,因为在 t6 开始了坏的事务。

下面的场景更详细地回顾了所有这些概念。

备份、恢复和前滚回顾
  1. t1 时完成了一次离线数据库备份。
  2. t2 时执行日常事务。
  3. 在 t4,您意识到某个事务已经毁坏了表空间 Z,并且停止这个事务。针对其他表空间的其他事务则继续。
  4. 只对于表空间 Z,您希望数据库处于 t3 之前的状态(开始坏事务之前的状态),因此:
    • 在 t5,您使用 t1 做的完整离线备份恢复 Z。
    • 完成恢复后,表空间将处于 rollforward pending 状态。
    • 在 t6,您将这个表空间前滚到 t3,即坏事务开始之前。
    • 您已经执行了一个时间点恢复。因此,DB2 现在将由于一致性的原因使表空间处于 backup pending 状态。
    • 在 t7,您备份表空间。这时,数据库是一致的,所有用户和应用程序可以正常工作。被恢复的表空间在 t3 到 t7 之间将存在一个间隔,这就是我们的意图 —— 删除被毁坏的数据。
阅读(21516) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~