如何通过查询或系统表查看DB2 z/OS中所有被锁定的表?
在DB2 z/OS中查询被锁定表的方法
在DB2 z/OS中,主要通过查询系统表SYSIBM.SYSLOCKS获取锁相关信息,结合SYSIBM.SYSTABLES关联可得到具体的被锁定表名。以下是几种实用的查询语句:
1. 查询所有持有或等待表级锁的表
该语句会列出所有被表级锁锁定的表,以及对应持有/等待锁的应用信息:
SELECT t.CREATOR AS 模式名, t.NAME AS 表名, l.LOCK_TYPE AS 锁定类型, l.LOCK_MODE AS 锁模式, l.CORRELATION_ID AS 应用ID, l.LOCK_STATUS AS 锁状态 FROM SYSIBM.SYSLOCKS l JOIN SYSIBM.SYSTABLES t ON l.NAME = t.NAME AND l.CREATOR = t.CREATOR WHERE l.LOCK_TYPE = 'T' -- 筛选表级锁(T代表Table) AND l.LOCK_STATUS IN ('G', 'W') -- G=持有锁,W=等待锁 ORDER BY t.CREATOR, t.NAME;
字段说明:
LOCK_MODE:锁的模式,常见值包括S(共享锁)、X(排他锁)、IX(意向排他锁)、IS(意向共享锁)等CORRELATION_ID:对应持有或等待锁的应用程序标识,可用于定位具体业务进程LOCK_STATUS:标记锁的当前状态,G表示已持有,W表示正在等待获取
2. 查询等待锁的表及对应的持有锁应用
若需排查锁等待问题,可通过此语句找到等待锁的应用,以及持有对应锁的源头应用:
SELECT t.CREATOR AS 模式名, t.NAME AS 表名, holder.LOCK_MODE AS 持有锁模式, holder.CORRELATION_ID AS 持有锁应用ID, waiter.CORRELATION_ID AS 等待锁应用ID, waiter.LOCK_MODE AS 请求锁模式 FROM SYSIBM.SYSLOCKS waiter JOIN SYSIBM.SYSLOCKS holder ON waiter.LOCK_ID = holder.LOCK_ID JOIN SYSIBM.SYSTABLES t ON waiter.NAME = t.NAME AND waiter.CREATOR = t.CREATOR WHERE waiter.LOCK_TYPE = 'T' AND waiter.LOCK_STATUS = 'W' -- 仅筛选等待锁的请求 ORDER BY t.CREATOR, t.NAME;
注意事项
- 执行这些查询需要具备访问
SYSIBM.SYSLOCKS和SYSIBM.SYSTABLES的SELECT权限,通常DBA角色默认拥有该权限 SYSLOCKS是实时更新的系统表,查询结果会反映数据库当前的锁状态
内容的提问来源于stack exchange,提问作者kagaar
相关产品推荐
相关产品推荐

