首页 > 代码库 > db2解除死锁实例

db2解除死锁实例

背景

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

下面实例讲解解锁过程。


解锁过程

①查找节点

解锁之前,需要知道数据库所在节点。
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即可。祝好运!