欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

db2解除死锁实例

程序员文章站 2022-05-13 18:59:43
...

背景 在团队协作的开发环境下,难免会遇到多个成员同时访问一张表的情况。在断点调试时,又非常容易加事务的长连接,引发死锁。 下面实例讲解解锁过程。 解锁过程 ①查找节点 解锁之前,需要知道数据库所在节点。 db2 = LIST NODE DIRECTORY 节点目录 目录中

背景

在团队协作的开发环境下,难免会遇到多个成员同时访问一张表的情况。在断点调试时,又非常容易加事务的长连接,引发死锁。

下面实例讲解解锁过程。

解锁过程

①查找节点

解锁之前,需要知道数据库所在节点。 db2 => LIST NODE DIRECTORY

节点目录

目录中的条目数 = 3

节点 1 条目:

节点名 = NDE5DC7D
注释 =
目录条目类型 = LOCAL
协议 = TCPIP
主机名 = 192.168.1.11
服务名称 = 50000

节点 2 条目:

节点名 = NDE5F473
注释 =
目录条目类型 = LOCAL
协议 = TCPIP
主机名 = 192.168.1.12
服务名称 = 50001

节点 3 条目:

节点名 = NDE9BBAE
注释 =
目录条目类型 = LOCAL
协议 = TCPIP
主机名 = 192.168.1.132
服务名称 = 50001

②登陆节点

db2 => attach to NDE5F473 user db2inst1 using db2inst1

实例连接信息

实例服务器 = DB2/LINUX 9.5.0
授权标识 = DB2INST1
本地实例别名 = NDE5F473
db2 => quit
DB20000I QUIT 命令成功完成。

③获取锁快照

需要注意的是,这个命令不是db2环境下执行的,需要先执行quit命令退出。 C:\Documents and Settings\Administrator>db2 GET SNAPSHOT FOR locks on crms > f:/lock.txt

-------------------------------------------------
db2 => GET SNAPSHOT FOR locks on crms

数据库锁定快照

数据库名称 = CRMS
数据库路径 = /home/db2inst2/db2inst2/NODE0000/SQL00
输入数据库别名 = CRMS
挂起的锁定 = 4
当前已连接的应用程序 = 13
当前正等待锁定的代理程序数 = 0
快照时间戳记 = 2011-03-31 13:21:53.285610

应用程序句柄 = 27151
应用程序标识 = C0A8013D.K506.110331013833
序号 = 00015
应用程序名 = db2jcc_application
CONNECT 授权标识 = DB2INST1
应用程序状态 = UOW 正在等待
状态更改时间 = 未收集
应用程序代码页 = 1208
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 26657
应用程序标识 = *LOCAL.DB2.110331002136
序号 = 00001
应用程序名 = db2taskd
CONNECT 授权标识 = DB2INST1
应用程序状态 = 连接已完成
状态更改时间 = 未收集
应用程序代码页 = 1386
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 27150
应用程序标识 = C0A8013D.K406.110331013832
序号 = 00014
应用程序名 = db2jcc_application
CONNECT 授权标识 = DB2INST1
应用程序状态 = UOW 正在等待
状态更改时间 = 未收集
应用程序代码页 = 1208
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 26676
应用程序标识 = C0A80169.I405.10EAC1004108
序号 = 00003
应用程序名 = QuestCentral.exe
CONNECT 授权标识 = DB2INST1
应用程序状态 = UOW 正在等待
状态更改时间 = 未收集
应用程序代码页 = 1386
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 26656
应用程序标识 = *LOCAL.DB2.110331002135
序号 = 00001
应用程序名 = db2stmm
CONNECT 授权标识 = DB2INST1
应用程序状态 = 连接已完成
状态更改时间 = 未收集
应用程序代码页 = 1386
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 26655
应用程序标识 = C0A80169.G605.10EAC1002623
序号 = 00006
应用程序名 = QuestCentral.exe
CONNECT 授权标识 = DB2INST1
应用程序状态 = UOW 正在等待
状态更改时间 = 未收集
应用程序代码页 = 1386
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 27201
应用程序标识 = 192.168.1.18.18183.110331014446
序号 = 00039
应用程序名 = db2jcc_application
CONNECT 授权标识 = DB2INST1
应用程序状态 = UOW 正在等待
状态更改时间 = 未收集
应用程序代码页 = 1208
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 27148
应用程序标识 = C0A8013D.K206.110331013830
序号 = 00016
应用程序名 = db2jcc_application
CONNECT 授权标识 = DB2INST1
应用程序状态 = UOW 正在等待
状态更改时间 = 未收集
应用程序代码页 = 1208
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 26773
应用程序标识 = C0A8013D.J805.110331005614
序号 = 00003
应用程序名 = db2jcc_application
CONNECT 授权标识 = DB2INST1
应用程序状态 = UOW 正在等待
状态更改时间 = 未收集
应用程序代码页 = 1208
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 28266
应用程序标识 = 192.168.1.56.39691.110331051526
序号 = 00001
应用程序名 = db2bp.exe
CONNECT 授权标识 = DB2INST1
应用程序状态 = 连接已完成
状态更改时间 = 未收集
应用程序代码页 = 1386
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 28292
应用程序标识 = 192.168.1.56.64523.110331052144
序号 = 00001
应用程序名 = db2jcc_application
CONNECT 授权标识 = DB2INST1
应用程序状态 = UOW 正在等待
状态更改时间 = 未收集
应用程序代码页 = 1208
挂起的锁定 = 4
总计等待时间(毫秒) = 未收集

锁定列表
锁定名称 = 0x0600030A1100A0FF0400000052
锁定属性 = 0x00000008
发行版标志 = 0x40000000
锁定计数 = 1
挂起计数 = 0
锁定对象名 = 21468545041
对象类型 = 行
表空间名 = TABLESPACE_IDX
表模式 = DB2INST1
表名 = TMP_AC_ROLE
方式 = X

锁定名称 = 0x5359535348323030DDECEF2841
锁定属性 = 0x00000000
发行版标志 = 0x40000000
锁定计数 = 1
挂起计数 = 0
锁定对象名 = 0
对象类型 = 内部方案锁定
方式 = S

锁定名称 = 0x53514C4445464C5428DD630641
锁定属性 = 0x00000000
发行版标志 = 0x40000000
锁定计数 = 1
挂起计数 = 0
锁定对象名 = 0
对象类型 = 内部方案锁定
方式 = S

锁定名称 = 0x0600030A000000000000000054
锁定属性 = 0x00000000
发行版标志 = 0x40000000
锁定计数 = 1
挂起计数 = 0
锁定对象名 = 2563
对象类型 = 表
表空间名 = TABLESPACE_IDX
表模式 = DB2INST1
表名 = TMP_AC_ROLE
方式 = IX

应用程序句柄 = 27147
应用程序标识 = C0A8013D.K106.110331013829
序号 = 00017
应用程序名 = db2jcc_application
CONNECT 授权标识 = DB2INST1
应用程序状态 = UOW 正在等待
状态更改时间 = 未收集
应用程序代码页 = 1208
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集
应用程序句柄 = 27725
应用程序标识 = C0A80169.IB06.10EAC1030658
序号 = 00003
应用程序名 = QuestCentral.exe
CONNECT 授权标识 = DB2INST1
应用程序状态 = UOW 正在等待
状态更改时间 = 未收集
应用程序代码页 = 1386
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 26659
应用程序标识 = *LOCAL.DB2.110331002138
序号 = 00001
应用程序名 = db2evmg_DB2DETAILDEA
CONNECT 授权标识 = DB2INST1
应用程序状态 = 连接已完成
状态更改时间 = 未收集
应用程序代码页 = 1386
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 27718
应用程序标识 = C0A80169.IA06.10EAC1030548
序号 = 00010
应用程序名 = QuestCentral.exe
CONNECT 授权标识 = DB2INST1
应用程序状态 = UOW 正在等待
状态更改时间 = 未收集
应用程序代码页 = 1386
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 27152
应用程序标识 = C0A8013D.K606.110331013834
序号 = 00013
应用程序名 = db2jcc_application
CONNECT 授权标识 = DB2INST1
应用程序状态 = UOW 正在等待
状态更改时间 = 未收集
应用程序代码页 = 1208
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

应用程序句柄 = 26658
应用程序标识 = *LOCAL.DB2.110331002137
序号 = 00001
应用程序名 = db2wlmd
CONNECT 授权标识 = DB2INST1
应用程序状态 = 连接已完成
状态更改时间 = 未收集
应用程序代码页 = 1386
挂起的锁定 = 0
总计等待时间(毫秒) = 未收集

④解锁

根据分析,我们发现用户(192.168.1.56)及其应用程序句柄(28292),锁定了TMP_AC_ROLE表。联系相关人员之后,将其数据库链接关闭,以解除锁。

db2 => force application(28292)
DB20000I FORCE APPLICATION命令成功完成。

DB21024I 该命令为异步的,可能不会立即生效。

至此,一般情况的死锁就搞定了。如果有多个应用锁定了表,就一个一个的force即可。祝好运!