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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563516
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563517
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563518
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563505
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563521
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563522
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563523
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563524
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563525
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563526
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563527
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563528
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563529
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563530
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563531
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563532
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563533
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563535
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563536
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563537
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563539
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563540
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563541
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563542
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563543
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563544
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563545
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563546
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563547
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563548
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563539
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563550
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563551
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563552
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563553
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563554
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563555
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563556
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563557
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563559
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563560
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563561
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563562
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563563
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563554
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563565
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563566
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563567
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563568
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563569
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(4)-sdccf-ChinaUnix博客
  • 博客访问: 103563570
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:18:49

developerWorks



并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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


并发性和隔离级别 一节中,我们看到 DB2 通过使用 把事务彼此隔离开来。锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源进行交互。(我们称与被锁定的资源关联的事务持有拥有 该锁。)DB2 数据库管理程序用锁来禁止事务访问其他事务写入的未提交数据(除非使用了未提交的读隔离级别),并禁止其他事务在拥有锁的事务使用限制性隔离级别时对这些行进行更新。一旦获取了锁,在事务终止之前,就一直持有该锁;该事务终止时释放锁,其他事务就可以使用被解锁的数据资源了。

如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待 事件。当锁等待事件发生时,尝试访问数据资源的事务所做的只是停止执行,直到拥有锁的事务终止和不兼容的锁被释放为止。







所有的锁都有下列基本属性:

  • objectobject 属性标识要锁定的数据资源。DB2 数据库管理程序在需要时锁定数据资源(如表空间、表和行)。
  • sizesize 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。例如,DB2 数据库管理程序可以让应用程序独占地控制表中的特定行,而不是让该应用程序独占地控制整个表。
  • durationduration 属性指定持有锁的时间长度。事务的隔离级别通常控制着锁的持续时间。
  • modemode 属性指定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。这个属性通常称为锁状态






锁状态确定允许锁的拥有者执行的访问类型,以及允许并发用户对被锁定数据资源执行的访问类型。表 1 说明了可用的锁状态,按照控制递增的次序排列。



锁状态(模式) 适用对象 描述
意向无(Intent None,IN) 表空间和表 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。
意向共享(Intent Share,IS) 表空间和表 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。)
下一键共享(Next Key Share,NS) 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。
共享(Share,S) 表和行 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。
意向互斥(Intent Exclusive,IX) 表空间和表 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。
带意向互斥的共享(Share With Intent Exclusive,SIX) 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。
更新(Update,U) 表和行 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。
下一键弱互斥(Next Key Weak Exclusive,NW) 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。
互斥(Exclusive,X) 表和行 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
弱互斥(Weak Exclusive,WE) 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。
超级互斥(Super Exclusive,Z) 表空间和表 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。






在大多数情况下,DB2 数据库管理程序在需要锁时隐式地获取它们,因此这些锁在 DB2 数据库管理程序的控制之下。除了使用未提交读隔离级别的情况外,事务从不需要显式地请求锁。实际上,惟一有可能被事务显式地锁定的数据库对象是表。图 6 说明了用何种逻辑确定为所引用的对象获取什么类型的锁。



锁

DB2 数据库管理程序总是尝试获取行级锁。但是,可以通过执行特殊形式的 ALTER TABLE 语句来修改这种行为,如下所示:

 
ALTER TABLE [TableName] LOCKSIZE TABLE 

其中的 TableName 标识一个现有表的名称,所有事务在访问它时都要获取表级锁。

也可以通过执行 LOCK TABLE 语句,强制 DB2 数据库管理程序为特定事务在表上获取表级锁,如下所示:

 
LOCK TABLE [TableName] IN [SHARE | EXCLUSIVE] MODE 

其中的 TableName 标识一个现有表的名称,对于这个表应该获取表级锁(假定其他事务在该表上没有不兼容的锁)。如果在执行这个语句时指定了共享(SHARE)模式,就会获得一个允许其他事务读取(但不能更改)存储在表中的数据的表级锁;如果执行时指定了互斥(EXCLUSIVE)模式,就会获得一个不允许其他事务读取或修改存储在表中的数据的表级锁。

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