db2解除死锁实例

WBOY
WBOYオリジナル
2016-06-07 15:56:031874ブラウズ

背景 在团队协作的开发环境下,难免会遇到多个成员同时访问一张表的情况。在断点调试时,又非常容易加事务的长连接,引发死锁。 下面实例讲解解锁过程。 解锁过程 ①查找节点 解锁之前,需要知道数据库所在节点。 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即可。祝好运!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:停车场程序设计次の記事:DB基础知识