当前位置:首页 > 开发 > 数据库 > 正文

解除被锁定的表

发表于: 2015-07-20   作者:youyu4   来源:转载   浏览:
摘要: 解除DB2数据库中表的死锁 某日无法查询DB2的数据库的某一张表,执行查询语句的后返回死锁或超时的错误: SQL0911N The current transaction has been rolled back because of a deadlockor timeo
解除DB2数据库中表的死锁

某日无法查询DB2的数据库的某一张表,执行查询语句的后返回死锁或超时的错误:

SQL0911N The current transaction has been rolled back because of a deadlock
or timeout. Reason code "68". SQLSTATE=40001

 其他的表实行数据库没有什么问题,只有一张或几张表出现这个问题,造成这个原因一般是由于表被锁造成的,也可以使用查看DB2数据库的建康状态来确认,处理方法见以下步骤。

 

步骤一:使用命令get snapshot来查询哪些进程锁了哪些表。命令如下:

db2 get snapshot for locks on databasename

db2inst1@HOST1:~> db2 get snapshot for locks on mydb

 

            Database Lock Snapshot

Database name                              = MYDB

Database path                              = /home/db2data/db2inst1/NODE0000/SQL00001/

Input database alias                       = MYDB

Locks held                                 = 20

Applications currently connected           = 21

Agents currently waiting on locks          = 0

Snapshot timestamp                         = 04/16/2009 14:59:29.185370

 

                …………………………

                …………………………

Application handle                         = 838

Application ID                             = GA47AA28.D60B.0154C5152621

Sequence number                            = 1432

Application name                           = javaw.exe

CONNECT Authorization ID                   = DB2INST1

Application status                         = UOW Waiting

Status change time                         = Not Collected

Application code page                      = 1208

Locks held                                 = 0

Total wait time (ms)                       = Not Collected

 

 

Application handle                         = 1076

Application ID                             = GA47AA28.GF12.0194C4113924

Sequence number                            = 0001

Application name                           = javaw.exe

CONNECT Authorization ID                   = DB2INST1

Application status                         = UOW Waiting

Status change time                         = Not Collected

Application code page                      = 1208

Locks held                                 = 8

Total wait time (ms)                       = Not Collected

 

List Of Locks   #在application handle紧跟后面出现list of locks表明该application handle锁了表或对象

 Lock Name                = 0x030039020DFF11000000000052

 Lock Attributes             = 0x00000000

 Release Flags               = 0x00000004

 Lock Count                  = 1

 Hold Count                  = 0

 Lock Object Name            = 1163533    #被锁对象名称

 Object Type                 = Row        #被锁对象类型

 Tablespace Name             = tbs_data    #被锁对象所在的表空间

 Table Schema                = DB2INST1

 Table Name                  = t_mytable1   #被锁的表名

 Mode                        = X

 

 Lock Name                   = 0xFF000000010000000100120056

 Lock Attributes             = 0x00000000

 Release Flags               = 0x40000000

 Lock Count                  = 2

 Hold Count                  = 0

 Lock Object Name            = 0

 Object Type                 = Internal Variation Lock

 Mode                        = S

 

 Lock Name                   = 0x0300390200FF11000000000052

 Lock Attributes             = 0x00000000

 Release Flags               = 0x00000002

 Lock Count                  = 1

 Hold Count                  = 0

 Lock Object Name            = 1163520

 Object Type                 = Row

 Tablespace Name             = tbs_data

 Table Schema                = DB2INST1

 Table Name                  = t_mytable2

 Mode                        = X

 

  …………………………………………………………………………………

 

步骤二:使用命令force来断开这些进行了死锁的进程来。命令如下:

db2 "force application (handle id)"

db2inst1@HOST1:~>db2 "force application (838)"

DB20000I  The FORCE APPLICATION command completed successfully.

DB21024I  This command is asynchronous and may not be effective immediately.

db2inst1@HOST1:~>db2 "force application (1076)"

DB20000I  The FORCE APPLICATION command completed successfully.

DB21024I  This command is asynchronous and may not be effective immediately.

 

步骤三: 使用命令list application查看是否已经断开了哪些进行了死锁的进程。命令如下:

db2inst1@HOST1:~> db2 list applications

 

Auth Id  Application    Appl.      Application Id                 DB       # of

         Name           Handle                                    Name    Agents

-------- -------------- ---------- ------------------------------ -------- -----

DB2INST1 db2bp          1330       *LOCAL.db2inst1.090416134941   MYDB    1   

DB2INST1 db2jccThread-8 85         GAB40153.G869.0120AF1F5A2E     MYDB    1   

DB2INST1 db2bp.exe      63         GA47AA28.BA0C.018346132405     MYDB    1   

DB2INST1 db2bp         825        *LOCAL.db2inst1.090416103954   MYDB    1   

DB2INST1 javaw.exe      1039       GA47AA28.F411.0194C4113304     MYDB    1   

DB2INST1 db2bp.exe      928        GA47AA28.L710.015844102651     MYDB    1   

DB2INST1 dbdaemon       877        *LOCAL.db2inst1.090408150559   MYDB    1    
 

解除被锁定的表

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
有几个朋友留言建议结合例子来演示一下, 上篇已经说过锁的几种类型, 可以利用系统动态视图sys.dm_tr
1. 数据库表锁定原理 1.1 目前的C/S,B/S结构都是多用户访问数据库,每个时间点会有成千上万个user来
<<接上篇:SQL Server数据库表锁定原理以及如何解除表的锁定>> 有几个朋友留言建议结合
1. 数据库表锁定原理 1.1 目前的C/S,B/S结构都是多用户访问数据库,每个时间点会有成千上万个user来
转自http://www.cnblogs.com/changbluesky/archive/2010/06/10/1753021.html 1. 数据库表锁定原理 1
1. 数据库表锁定原理 1.1 目前的C/S,B/S结构都是多用户访问数据库,每个时间点会有成千上万个user来
一、计算机假锁定 最近遇到在登录到win时,弹出对话框: 用户:XXX 密码: 确定 关机 高级 密码为空
一、计算机假锁定 最近遇到在登录到win时,弹出对话框: 用户:XXX 密码: 确定 关机 高级 密码为空
描叙:EXCEL工作表被锁定,无法放大缩小,也无法移动,如图: 原因:在设置保护工作簿是选择了“窗
一、前言                                 单点登录是通过域名从
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号