MON_GET_LOCKS 表函数 - 列示当前连接的数据库中的所有锁定

MON_GET_LOCKS 表函数返回当前连接的数据库中所有锁定的列表。

要获取有关锁定的信息,请使用 MON_GET_LOCKS , MON_FORMAT_LOCK_NAME 和 MON_GET_APPL_LOCKWAIT 表函数以及 MON_LOCKWAIT 管理视图,而不是 SNAPLOCKWAIT 管理视图和 SNAP_GET_LOCKWAIT 表函数, SNAPLOCK 管理视图和 SNAP_GET_LOCK 表函数以及 版本 9.7的修订包 1 中不推荐使用的LOCKS_挂起管理视图。

Read syntax diagramSkip visual syntax diagramMON_GET_LOCKS(search_args ,member)

模式为 SYSPROC。

表函数参数

search_args
类型为 CLOB (1K) 的输入参数,表示 - 对的列表。 如果列表为空或 NULL ,那么将返回当前连接的数据库中的所有锁定。 否则,将返回与 key-value 对列表所表示的所有条件匹配的所有锁定。 - 对必须遵循以下格式:
  • key 是一个字符串,它由一个开始标记,后跟值,后跟一个结束标记组成。
  • 打开标记由打开角度括号组成,后跟键名,后跟闭合角度括号。 不允许使用空格。
  • 结束标记由开口角括号,后跟正斜杠,后跟键名,后跟结束角括号组成。 不允许使用空格。
  • 所有键都区分大小写,并且只能在 search_args 参数中指定一次。
  • 密钥的顺序无关紧要。

对于无效的 key-value 对,将返回 SQLCODE -171。

如果表不存在,那么将返回 SQLCODE -204。

在不同密钥之间执行 AND 操作。 在同一键的多个值之间执行 OR 操作。 例如,以下使用 search_args 参数将返回类型为 "表" 或 "行" 的所有锁定的列表,这些锁定由具有句柄 123 的应用程序以 "共享" 或 "互斥" 方式持有或等待获取:
CLOB('<application_handle>123</application_handle>
      <lock_object_type>Table:Row</lock_object_type>
      <lock_mode>S:X</lock_mode>')
MON_GET_LOCKS 表函数的可用键如下所示:
  • application_handle

    返回当前持有或正在由指定应用程序句柄获取的所有锁定的列表。 只能指定一次出现的键值。 该值指定为 INTEGER。 例如:

    CLOB('<application_handle>145</application_handle>')
  • lock_name

    返回与指定锁定名称匹配的所有锁定的列表。 只能指定一次出现的键值。 该值指定为最大长度为 32 的字符串。 例如:

    CLOB('<lock_name>00030005000000000280000452</lock_name>')
  • lock_object_type
    返回与指定锁定对象类型匹配的所有锁定的列表。 可以指定多次出现的键值 (最多为 5)。 每个值 (不区分大小写) 必须用冒号 (:) 分隔,并指定为最大长度为 32 个字符的字符串。 例如:
    CLOB('<lock_object_type>Table:Chunk:Plan</lock_object_type>')

    有关可能的输入值的列表,请参阅 lock_object_type-"等待的锁定对象类型" 监视元素

  • lock_mode
    返回与指定锁定方式匹配的所有锁定的列表。 可以指定多次出现的键值 (最多为 5)。 每个值 (不区分大小写) 由冒号 (:) 分隔,并指定为最大长度为 3 的字符串。 例如:
    CLOB('<lock_mode>IS:IN:U</lock_mode>')

    有关可能的输入值的列表,请参阅 lock_mode-Lock mode 监视元素

  • lock_status
    返回处于指定状态的所有锁定的列表。 只能指定一次出现的键值。 该值指定为字符。
    CLOB('<lock_status>W</lock_status>')

    有关可能的输入值的列表,请参阅 lock_status-"锁定状态" 监视元素

  • table_schema

    返回由指定模式名称限定的所有锁定的列表。 还必须指定 table_name 键。 只能指定一次出现的键值。 该值指定为最大长度为 128 的字符串。

  • table_name

    返回引用指定表的所有锁定的列表。 还必须指定 table_schema 键。 只能指定一次出现的键值。 该值指定为最大长度为 128 的字符串。 例如:

    CLOB('<table_schema>USER1</table_schema>
          <table_name>INVENTORY</table_name>')
以下示例演示如何在 search_args 参数中使用 key-value 对。
  1. 要搜索所有 ROW 和 TABLE 锁定:
    CLOB('<lock_object_type>Table:Row</lock_object_type>')
  2. 要搜索应用程序句柄 123 正在挂起或正在等待获取该引用表 T1的所有锁定,并且这些锁定是由用户 USER1:
    CLOB('<application_handle>123</application_handle>
          <table_schema>USER1</table_schema>
          <table_name>T1</table_name>')
  3. 要搜索当前以共享方式持有的所有 TABLE , ROW 和 BUFFERPOOL 锁定:
    CLOB('<lock_mode>S</lock_mode>
          <lock_status>G</lock_status>
          <lock_object_type>Table:Row:Bufferpool</lock_object_type>')
成员
类型为 INTEGER 的输入参数,用于指定从哪个成员返回数据。 为当前成员指定 -1 ,为所有活动成员指定 -2

权限

需要下列其中一个权限或特权:
  • 对例程的 EXECUTE 特权
  • DATAACCESS 权限
  • DBADM 权限
  • SQLADM 权限

缺省 PUBLIC 特权

示例

在此样本方案中, MON_GET_LOCKS 和 MON_GET_APPL_LOCKWAIT 表函数用于调查所有成员上当前连接的数据库中的锁定情况。
  1. 调用 MON_GET_APPL_LOCKWAIT 表函数以确定所有成员上正在等待在当前连接的数据库中获取的所有锁定:
    SELECT lock_name, 
           hld_member, 
           lock_status,
           hld_application_handle FROM 
           TABLE (MON_GET_APPL_LOCKWAIT(NULL, -2))
    此查询将返回以下输出:
    LOCK_NAME                  HLD_MEMBER LOCK_STATUS HLD_APPLICATION_HANDLE
    -------------------------- ---------- ----------- ----------------------
    00030005000000000280000452 -2           W                  
    00030005000000000280000452 -2           W                  
    00030005000000000280000452 -2           W                  
    
      3 record(s) selected.

    显示 HLD_MEMBER 的记录为 -2 指示锁定 0x00030005000000000280000452 正在远程成员上挂起。

  2. 通过指定锁定名称 0x00030005000000000280000452作为搜索参数,调用 MON_GET_LOCKS 表函数以确定锁定的持有者:
    SELECT lock_name, 
           member, 
           lock_status,
           application_handle FROM 
        TABLE (MON_GET_LOCKS(
          CLOB('<lock_name>00030005000000000280000452</lock_name>'), 
             -2))
    此查询将返回以下输出:
    LOCK_NAME                  MEMBER LOCK_STATUS APPLICATION_HANDLE
    -------------------------- ------ ----------- ------------------
    00030005000000000280000452 0      W              12562
    00030005000000000280000452 1      W              12562
    00030005000000000280000452 2      G              65545
    00030005000000000280000452 3      W              12562
    
      4 record(s) selected.

    要了解有关持有锁定的应用程序的更多信息,您可以调用WLM_GET_SERVICE_CLASS_WORKLOAD_实例或 WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES 表函数。

返回的信息

表 1. MON_GET_LOCKS 表函数返回的信息
列名 数据类型 描述或监视元素
APPLICATION_HANDLE BIGINT application_handle - 应用程序句柄

如果 LOCK_STATUS 列为 G ,那么这表示当前持有锁定的应用程序。

如果 LOCK_STATUS 列为 W 或 C ,那么这表示当前正在等待获取锁定的应用程序。

值 0 指示应用程序不再存在。 当系统崩溃后数据库上的事务不完整时,可能会显示该值。 这意味着锁定由正在回滚的事务或必须解决的不确定事务持有。

MEMBER SMALLINT member-从中检索此行的数据的数据库成员
LOCK_NAME VARCHAR(32) lock_name - 锁定名称
LOCK_OBJECT_TYPE_ID CHAR(1) FOR BIT DATA 留作将来使用
LOCK_OBJECT_TYPE VARCHAR(32) lock_object_type-锁定对象类型

如果 LOCK_STATUS 列为 G ,那么这表示应用程序当前持有的对象类型。

如果 LOCK_STATUS 列为 W 或 C ,那么这表示应用程序当前正在等待获取的对象类型。

有关可能的输入值,请参阅 lock_object_type-"等待的锁定对象类型" 监视元素

LOCK_MODE VARCHAR(3) lock_mode - 锁定方式

如果 LOCK_STATUS 列为 G ,那么这表示应用程序当前持有锁定的方式。

如果 LOCK_STATUS 列为 W 或 C ,那么这表示应用程序当前正在等待获取锁定的方式。

如果方式未知,那么将对此列返回值 NULL。

LOCK_CURRENT_MODE VARCHAR(3) lock_current_mode - 转换前的原始锁定方式

如果方式未知,那么将对此列返回值 NULL。

LOCK_STATUS CHAR(1) lock_status - 锁定状态
LOCK_ATTRIBUTES CHAR(16) lock_attributes - 锁定属性
LOCK_RELEASE_FLAGS CHAR(16) lock_release_flags -“锁定释放标志”监视元素
LOCK_RRIID BIGINT 保留供内部使用
LOCK_COUNT BIGINT Lock_count 监视元素
LOCK_HOLD_COUNT BIGINT lock_hold_count 监视元素
tbsp_id BIGINT tablespace_id-表空间标识

对于不引用表空间的锁定,将返回值 NULL。

tab_file_id BIGINT table_file_id-表文件标识