DB2从版本8.2开始,客户可以为每一个DB2会话指定锁定策略。在以前的版本中,只能通过配置数据库配置参数LOCKTIMEOUT配置一个应用程序如果不能获得锁,等待多长时间将回滚该事务。

单个会话现在可以指定锁定等待方式策略,该策略在会话需要的锁定不能立即获取时使用。该策略指示会话是否将采取如下措施:在不能获取锁定时返回 SQLCODE 和 SQLSTATE

无限等待锁定

等待为锁定指定的时间

等待锁定时使用 locktimeout 数据库配置参数的值

锁定等待方式策略通过新的 SET CURRENT LOCK TIMEOUT 语句指定,此语句更改 CURRENTLOCK TIMEOUT 专用寄存器的值。CURRENT LOCK TIMEOUT 专用寄存器指定在返回指示不能获取锁定的错误之前等待锁定的秒数。

虽然 locktimeout 参数的值适用于所有锁定,但是此新功能只影响以下锁定类型:行、表、索引键和多维群集(MDC)块锁定。

该语句的语法如下:

.-CURRENT-. .-=-.

>>-SET--+---------+--LOCK TIMEOUT--+---+------------>

>--+-WAIT-----------------------+------------><

+-NOT WAIT-------------------+

+-NULL-----------------------+

| .-WAIT-. |

+-+------+-- intger-constant -+

'- host-variable --------------'

关于该命令的详细说明,请参见:http://publib.boulder.ibm.com/infocenter/db2help/topic

/com.ibm.db2.udb.doc/admin/r0011874.htm?resultof=

%22%73%65%74%22%20%22%63%75%72%72%65%6e%74%22%2

0%22%6c%6f%63%6b%22%20%22%74%69%6d%65%6f%75%74%22%20

下面通过一个例子来讲解如何使用这个功能(我们使用SAMPLE数据库):

1、使用"db2 +c"打开两个DB2会话。(+c 参数关闭AUTOCOMMIT)

2、在一个会话中执行下面的语句:

connect to sample

create table test(id int,name char(10))

commit

insert into test values(1,'test')

3、在另一个会话中执行下面的语句:

connect to sample

select * from test

由于默认LOCKTIMEOUT参数设置为-1,所以这个会话会一直等着,没有结果返回。如下图所示:

4、下面我们在第一歌窗口中重复一样的操作,只是在第二个窗口中使用如下语句

set currentlock timeout not wait

select * from test

我们看到select语句不会等待,而是直接返回错误。参见下图:

您可以自己采取上面的方法测试一下其他的参数设置。

该语句可以在程序中和存储过程中使用。另外这个功能对于CLI程序来讲,还可以方便地通过设置db2cli.ini文件配置关键字使用,关键字为:

LOCKTIMEOUT = WAIT | NOT WAIT | WAIT seconds | seconds

通过设置这个参数,DB2 CLI会自动根据设置值发送一条“SET CURRENT LOCK TIMEOUT”语句到DB2服务器,该参数值也可以通过在程序中显示使用

“SET CURRENT LOCK TIMEOUT”重置。

您可以根据您应用程序的需求,灵活运用这条语句设计合适的DB2会话锁定策略。

db2如何锁定一张表_DB2数据库为单个会话锁定的技巧相关推荐

  1. 深入浅出SQL(10)-多张表的数据库设计

    该系列文章系个人读书笔记及总结性内容,任何组织和个人不得转载进行商业活动! 多张表的数据库设计:拓展你的表 到了某个时候,一张表不够了: 我们在上一章中就已经体会到,对于四季饮品的表,查询饮品信息还是 ...

  2. mysql 表字段信息从一张表迁移到另一张表_MySQL(数据库)笔记

    ###数据库 之前通过流去操作文件保存数据库的弊端: 1.执行效率低 2.开发成本高 3.一般只能保存小量数据 4.只能保存文本数据 ####什么是DB - DataBase 数据库:代表文件集合 # ...

  3. db2怎么恢复误删除的数据_db2数据库被误删后 oracle数据库误删数据恢复

    db2用户删除后db2数据库无法再启动怎么回事? 创建实例时,DB2的命令和环境变量会在/home/db2inst1中生成一个sqllib文件夹,即整个实例 当实例用户生成 db2icrt-u db2 ...

  4. mysql视图和中间表_数据库设计中的14个技巧

    时 间:2006-09-15 00:00:00 作 者: 摘 要:数据库设计中的14个技巧 正 文: 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关 ...

  5. db2如何锁定一张表_办公必备的保护工作表技巧,你会了么?

    为避免表格数据被非法修改,可以对含有数据的单元格区域进行锁定保护,这需要结合工作表保护才能实现,今天我们就来看看如何保护工作表. 按[Ctrl+A]组合键选择工作表中的所有单元格,在[开始]→[单元格 ...

  6. db2 控制台执行创建函数语句_DB2数据库中创建定义函数

    本文将为您详细介绍DB2数据库中创建用户自定义行数,用以扩展扩展内置的 DB2 函数的方法,供您参考,希望对您有所帮助. 可以创建用户定义函数来扩展内置的 DB2 函数.例如,创建计算复杂的算术表达式 ...

  7. mysql 导出表数据到另一张表_yz-Mysql数据库中一个表中的数据导出来到另外一个数据库的表格...

    -----------方式一-------------------------------------------------------------------------------------- ...

  8. mysql 怎么同时删除两张表的数据库,mysql怎样删除多个表格数据库数据_数据库

    mysql删除多个表格数据库数据的要领:在两个表之间竖立级联删除关联,完成删除一个表的数据时,同时删除另一个表中相干的数据,语句为[delete t1,t2 from t1,t2 where 前提]. ...

  9. mysql子查询存到另一张表_MySQL数据库(11)----使用子查询实现多表查询

    子查询指的是用括号括起来,并嵌入另一条语句里的那条 SELECT 语句.下面有一个示例,它实现的是找出与考试类别('T')相对应的所有考试事件行的 ID,然后利用它们来查找那些考试的成绩: SELEC ...

最新文章

  1. uwsgi: invalid option -- 'x'
  2. 从空间数据库中删除所有拓扑对象
  3. 浅谈Android中的Handler机制
  4. 光伏市场抢装潮6月底前或重现
  5. 2022年中国美妆护肤品行业投资研究报告
  6. BOM函数之history对象
  7. 记某次CTF中Let me in
  8. 7月20日专家在线访谈“员工上网管理是否可行”
  9. 所谓国产机:别的LINUX,要么无法安装,要么安装了跑不起来
  10. php模拟表单提交,php用fsockopen()函数实现模拟提交表单。
  11. mysql必知必会第4版pdf百度网盘_SQL必知必会 第4版pdf
  12. 获取富文本中的图片链接
  13. 工业机器人(四)——传感元件制作
  14. FairGuard游戏Lua加密方案解析
  15. 2022年京东双11和天猫双11预售时间介绍
  16. 【Linux 主机ssh远程连接暴力破解详解】
  17. 【高级数理统计R语言学习】5 协方差分析
  18. 回顾林丹的职业生涯,用python看看粉丝都说了些什么!
  19. [THUWC2017]在美妙的数学王国中畅游 LCT+泰勒展开+求导
  20. RASPBERRY PI3 - RPi.GPIO 官方使用文档翻译

热门文章

  1. netcore5开发Android,那些鼓吹国内首个.NET 5框架的,该醒醒了!
  2. php安装sqlserver2008,php53 mssql2008_sqlserver2008安装环境_php mssql库
  3. java输出的文本内容不对_java 字符串写入文件后再读出不一样? 有什么解决办法吗?...
  4. 玩转 SpringBoot 2 之发送邮件篇
  5. Android 屏幕适配解决方案汇总
  6. 牛头刨机械原理matlab代码
  7. 基于JAVA+Spring+MYSQL的婚纱摄影网站
  8. 基于JAVA+SpringMVC+MYSQL的数码商城
  9. ASP.NET Core学习——5
  10. Mysql Update 流程摘抄