`
sjk2013
  • 浏览: 2306767 次
文章分类
社区版块
存档分类
最新评论

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即可。祝好运!

分享到:
评论

相关推荐

    db2解除死锁

    本篇文章将详细介绍如何在DB2中检测和解决死锁,特别是针对标题中提到的"db2解除死锁"的情况。 首先,我们需要了解如何开启DB2的死锁监控。在DB2环境中,可以使用`db2 update monitor switches using lock on`命令...

    DB2解决表死锁

    本文将深入探讨“DB2解决表死锁”这一主题,结合提供的资源“DB2解除表锁.doc”,我们将讨论死锁的基本概念、DB2中的死锁检测、死锁预防以及如何在遇到死锁时进行有效的解决。 首先,我们要理解什么是死锁。死锁是...

    db2死锁问题分析及解决方案

    ### DB2死锁问题分析及解决方案 #### 一、引言 在数据库管理与维护过程中,死锁问题是一个常见的挑战,特别是在使用IBM DB2这样的大型关系型数据库管理系统时。本文将详细探讨DB2中死锁问题的分析方法及有效的解决...

    DB2发生死锁怎么办

    DB2 死锁解决方法 在 DB2 数据库中,死锁是一个常见的问题,它会导致应用程序阻塞或崩溃。那么,如何捕获锁等待或死锁信息,并解决锁问题呢?下面是一个简单的解决方案。 参数调整 在 DB2 中,有一些参数可以调整...

    oracle如何解除死锁

    ### Oracle如何解除死锁 在Oracle数据库环境中,死锁是一种常见的问题,特别是在高并发的应用场景下更为常见。死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种僵局现象,在这种状态下,每个事务都在...

    db2死锁问题.doc

    #### 三、解除DB2死锁 当确定了发生死锁的具体位置后,就需要采取措施解除死锁。通常情况下,可以通过强制终止造成死锁的应用程序来解决问题。使用以下命令强制终止应用程序: ```bash C:\>db2 "force application...

    DB2解数据库死锁.doc

    本文将深入探讨DB2数据库中的死锁现象、死锁检测以及如何解除死锁。 死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力干涉它们都将无法继续执行。在DB2中,当多个事务互相等待...

    sqlserver 解除死锁

    sqlserver 解除死锁,网络上看到的很实用分享给大一起用

    Linux系统重启db2数据库命令实例详解.docx

    10. **查看锁和死锁**:`db2 get snapshot for locks on db_name`获取锁的状态,`db2 "select agent_id, tabname, lock_mode from table(snap_get_lock('<db_name>')) as aa"`显示死锁信息。 11. **监控SQL性能**:...

    操作系统课程设计-死锁解除.rar

    在这个"操作系统课程设计-死锁解除"项目中,我们将深入探讨一个关键的概念——死锁,并学习如何避免或解除它。 死锁是指两个或更多的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉它们都...

    解决DB2死锁的一些资料整理

    DB2死锁问题在数据库应用系统中是一种常见的性能瓶颈,特别是在新系统上线初期,由于测试不足和对DB2机制理解不深,可能会频繁出现。DB2死锁涉及到多个层面,包括系统参数配置、应用程序设计以及性能监控与维护。...

    操作系统死锁检测与解除

    3. **解除死锁**:当检测到死锁后,需要采取策略解除死锁。实验中采用的是“撤销进程”的方法,即撤销占有资源最多的进程,以期望打破死锁状态。这在`jiesuo` 函数中实现,首先统计每个进程的资源占用,找出占用最多...

    操作系统实验报告-死锁的检测与解除.pdf

    ### 死锁的检测与解除 #### 实验背景与目的 本实验主要针对操作系统中一个重要的问题——死锁,特别是其检测与解除方法的研究。在多任务操作系统中,多个进程共享资源是常见的现象,但如果不恰当地管理这些资源,...

    通过Android trace文件分析死锁ANR实例过程

    本文将通过一个具体的死锁导致的ANR实例,解析如何利用Android trace文件来分析和解决这类问题。 当Android系统检测到ANR发生时,会在/data/anr/目录下自动生成一个trace文件,其中包含了系统运行时的详细信息,如...

    C++死锁的检测与解除

    用C++实现的死锁检测与解除算法,代码很短,很简单。

    SQL Server死锁的解除方法

    "SQL Server死锁的解除方法" SQL Server死锁是指在多个事务之间的资源竞争时,出现的循环等待资源的现象。死锁会导致系统性能下降,甚至会导致系统崩溃。因此,解决SQL Server死锁是非常重要的。 SQL Server死锁的...

    java线程死锁实例

    Java线程死锁是多线程编程中一个常见的问题,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。死锁的发生通常涉及到四个必要条件:互斥、请求与保持、不剥夺和循环等待。理解并解决Java...

    DB2数据库处理表死锁

    ### DB2数据库处理表死锁知识点详解 #### 一、理解DB2中的死锁与锁机制 在DB2(Database 2)这种关系型数据库管理系统中,锁是一种用于确保数据一致性和完整性的关键机制。当两个或多个事务互相等待对方释放资源时...

    死锁的检测与接触 C语言

    本实验报告关注的是死锁的检测与解除,通过C语言实现。实验的主要目的是理解操作系统如何检测死锁的发生,并在发生死锁时采取措施解除。 首先,实验设计了一个类似于银行家算法的数据结构,包括以下关键部分: 1. `...

Global site tag (gtag.js) - Google Analytics