DB2 11.5.9 zLinux环境下,如何用SQL查询持有特定包内部计划锁的应用
查找持有特定包内部计划共享锁的应用信息
核心SQL语句
替换语句中的占位符为你的目标包模式和名称即可执行:
WITH pkg_locks AS ( SELECT l.lock_handle, l.application_handle, l.connection_handle, l.lock_mode, p.package_schema, p.package_name, p.package_id FROM TABLE(MON_GET_LOCKS('', -1)) AS l JOIN TABLE(MON_GET_PACKAGE('', '', '', -1)) AS p ON l.lock_object_id = p.package_id WHERE l.lock_type = 'PLAN' AND l.lock_mode = 'S' AND p.package_schema = 'TARGET_SCHEMA' -- 替换为目标包模式 AND p.package_name = 'TARGET_PACKAGE' -- 替换为目标包名称 ) SELECT a.application_handle, a.application_name, a.session_auth_id, c.connection_handle, c.client_ipaddr, c.client_hostname, pl.lock_mode, pl.package_schema, pl.package_name FROM pkg_locks pl JOIN TABLE(MON_GET_APPLICATION('', -1)) AS a ON pl.application_handle = a.application_handle JOIN TABLE(MON_GET_CONNECTION('', -1)) AS c ON pl.connection_handle = c.connection_handle ORDER BY a.application_handle;
关键说明
- 内部计划锁的
lock_type固定为PLAN,共享锁对应lock_mode='S';通过MON_GET_PACKAGE获取包的package_id,与MON_GET_LOCKS中的lock_object_id关联,这是定位包锁的核心关联逻辑。 - 关联
MON_GET_APPLICATION可获取应用名称、会话授权用户等应用层信息,MON_GET_CONNECTION补充客户端IP、主机名等连接细节。 - 执行用户需具备
DATAACCESS或MONITOR1权限,否则无法访问这些监控视图。 - 若包存在多版本(不同包令牌),可添加
p.package_token条件过滤特定版本的锁。
排查注意事项
- 先执行
SELECT * FROM TABLE(MON_GET_PACKAGE('TARGET_SCHEMA', 'TARGET_PACKAGE', '', -1))验证目标包是否存在且有活跃执行上下文。 - 若需跨分区查询,将
MON_GET_LOCKS、MON_GET_PACKAGE等函数的第二个参数(分区号)改为-2(覆盖所有分区)。
内容的提问来源于stack exchange,提问作者lazydba
相关产品推荐
相关产品推荐

