设为首页 收藏本站
查看: 1189|回复: 0

[经验分享] DB2解除锁表

[复制链接]

尚未签到

发表于 2016-11-17 09:40:25 | 显示全部楼层 |阅读模式
背景
  生产环境中,我几乎没有遇到过锁表。多是在开发过程中遇到的,比如团队开发中经常会遇到多个功能访问同一张表的情况。如果有开发人员在这张表加了排它锁,然后又忘记提交事务,那么其他开发人员就要一直等待了。如开发人员在断点调试(Debug)忘记点通过、数据库客户端中修改数据忘记Commit……
  当我们在办公室或公司IM上喊了几次后没人反应后,就需要强制解锁了。

DB2解锁实战
  打开DB2命令行,开始战斗。

    1.查找NODE节点
  键入命令“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.13
服务名称             = 50001

  我要找的表在192.168.1.12节点,那么根据节点名连接。



db2 => attach to NDE5F473 user [username] using [password]
实例连接信息
实例服务器             = DB2/LINUX 9.5.0
授权标识       = DB2INST1
本地实例别名           = NDE5F473


2.获取数据库锁定快照
  连上实例服务器之后,我们要获取目标数据库锁定快照,然后找出是那个应用链接锁定了目标表。
  为了方便导出快照文件,我们先退出db2命令行。



db2 => quit
DB20000I  QUIT 命令成功完成。

  然后,我们获取目标数据库快照文件。



C:\Documents and Settings\Administrator>db2 GET SNAPSHOT FOR locks on [dbname] > lock.txt

  开始分析快照文件,找到锁定表的应用。



db2 => GET SNAPSHOT FOR locks on XXXX
数据库锁定快照
数据库名称                               = XXXX
数据库路径                          = /home/db2inst2/db2inst2/NODE0000/SQL00
输入数据库别名                      = XXXX
挂起的锁定                      = 4
当前已连接的应用程序            = 13
当前正等待锁定的代理程序数      = 0
快照时间戳记                    = 2011-03-31 13:21:53.285610
......
应用程序句柄                               = 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
表名                 = TABLENAME
方式                           = X
锁定名称                       = 0x5359535348323030DDECEF2841
锁定属性                       = 0x00000000
发行版标志                     = 0x40000000
锁定计数                       = 1
挂起计数                       = 0
锁定对象名                     = 0
对象类型                       = 内部方案锁定
方式                           = S
锁定名称                       = 0x53514C4445464C5428DD630641
锁定属性                       = 0x00000000
发行版标志                     = 0x40000000
锁定计数                       = 1
挂起计数                       = 0
锁定对象名                     = 0
对象类型                       = 内部方案锁定
方式                           = S
锁定名称                       = 0x0600030A000000000000000054
锁定属性                       = 0x00000000
发行版标志                     = 0x40000000
锁定计数                       = 1
挂起计数                       = 0
锁定对象名                     = 2563
对象类型                       = 表
表空间名                       = TABLESPACE_IDX
表模式               = DB2INST1
表名                 = TABLENAME
方式                           = IX

  经过分析,我们发现应用程序句柄28292,IP192.168.1.56的这台机器上db2jcc_application应用锁定了目标表。这应该是一个jdbc程序,基本断定是有人在Debug断点调试,可以根据IP找到人让他把断点过掉。有时显示的是十六进制的IP(如C0A8013D),那就自己用计算机原理中学到的进制转换算吧。C0 -> 192,A8 ->168,01 -> 1,3D -> 61,就192.168.1.61。

3.强制结束锁表的链接
  如果找不到相关人员主动解锁,那就只能强制结束链接了。我们之前已经找到应用程序句柄是28292,那现在就来暴力解除。DB2提醒改命令为异步,一般几秒后就发现目标表可以访问了。



db2 => force application(28292)
DB20000I  FORCE APPLICATION命令成功完成。
DB21024I  该命令为异步的,可能不会立即生效。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-301542-1-1.html 上篇帖子: db2 创建用户及授权 下篇帖子: DB2 常用命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表