您的位置:首页 > 其它

db2解除死锁实例

2014-05-07 09:07 459 查看

背景

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

下面实例讲解解锁过程。

解锁过程

①查找节点

解锁之前,需要知道数据库所在节点。
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即可。祝好运!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: