DB2 for i 7.3中如何定位锁定表/行的应用程序?
DB2 for i 7.3中SQL0913行锁的持有应用信息排查方案
1. 通过系统视图查询锁详情
DB2 for i 7.3提供了多个系统视图可直接查询锁信息,以下是常用的两种方式:
方式一:使用QSYS2.LOCK_INFO视图(推荐)
该视图整合了对象锁与行锁信息,字段直观易懂:
SELECT LOCK_OWNER_JOB_NAME, LOCK_OWNER_USER_NAME, LOCK_TYPE, LOCK_MODE, OBJECT_SCHEMA, OBJECT_NAME, ROW_NUMBER FROM QSYS2.LOCK_INFO WHERE OBJECT_SCHEMA = 'MYLIB' AND OBJECT_NAME = 'MYTAB00002' AND LOCK_LEVEL = 'ROW';
关键字段说明:
LOCK_OWNER_JOB_NAME:持有锁的作业名称LOCK_OWNER_USER_NAME:持有锁的用户账号LOCK_MODE:锁模式(如X代表排他锁,会阻止UPDATE操作)ROW_NUMBER:被锁定行的相对记录号
方式二:使用SYSLIB.SYSLKROW视图
专门用于查询行级锁的系统视图:
SELECT LK_JOB, LK_USER, LK_TYPE, LK_MODE, LK_OBJ, LK_OBJLIB, LK_ROW FROM SYSLIB.SYSLKROW WHERE LK_OBJLIB = 'MYLIB' AND LK_OBJ = 'MYTAB00002';
2. 使用CL命令快速排查
查看特定对象的所有锁
执行以下CL命令,会弹出交互式界面展示所有持有该对象锁的作业:
WRKOBJLCK OBJ(MYLIB/MYTAB00002) OBJTYPE(*FILE)
按F11切换视图,可查看锁的级别(行级/对象级)与锁模式。
查看单个作业的锁资源
若已锁定可疑作业,使用WRKJOB命令进入作业管理界面,选择Work with locks选项,可查看该作业持有的所有锁:
WRKJOB JOB(作业名)
3. 关联锁定行与主键值
如果知道失败UPDATE语句的主键值,可通过相对记录号(RRN)关联锁信息:
- 查询目标行的相对记录号:
SELECT RRN(MYTAB00002) AS ROW_NUMBER, PRIMARY_KEY, * FROM MYLIB.MYTAB00002 WHERE PRIMARY_KEY = '你的主键值';
- 将得到的
ROW_NUMBER代入之前的锁查询视图,即可定位持有该行锁的作业。
4. 深入分析作业上下文
拿到作业名后,可使用以下命令获取作业详细信息:
DSPJOB JOB(作业名):查看作业的程序调用栈、当前执行的SQL语句,确认锁的来源WRKJOB JOB(作业名):查看作业状态、资源使用情况,必要时可结束异常作业(需谨慎操作)
内容的提问来源于stack exchange,提问作者AgostinoX
相关产品推荐
相关产品推荐

