MON_GET_LOCKS 表関数 - 現在接続されているデータベース内のすべてのロックのリスト

MON_GET_LOCKS 表関数は、現在接続されているデータベース内のすべてのロックのリストを戻します。

ロックに関する情報を取得するには、SNAPLOCKWAIT 管理ビューおよび SNAP_GET_LOCKWAIT 表関数の代わりに MON_GET_LOCKS、MON_FORMAT_LOCK_NAME、および MON_GET_APPL_LOCKWAIT 表関数を使用し、SNAPLOCK 管理ビューおよび SNAP_GET_LOCKWAIT 表関数の代わりに MON_LOCKWAIT 管理ビューを使用します。 バージョン 9.7非推奨になっているの LOCKS_HELD 表関数です。

Read syntax diagramSkip visual syntax diagramMON_GET_LOCKS(search_args ,member)

スキーマは SYSPROC です。

表関数パラメーター

検索引数 (search_args)
key-value の組のリストを表すタイプ CLOB(1K) の入力パラメーター。 リストが空または NULL の場合には、現在接続されているデータベース内のすべてのロックが戻されます。 それ以外の場合は、key-value の組のリストによって表されるすべての条件に一致するすべてのロックが戻されます。 key-value の組は以下の形式に従う必要があります。
  • key は、開始タグ、値、終了タグの順序で構成されるストリングです。
  • 開始タグは、タグの始まりを示す不等号括弧、キー名、タグの終わりを示す不等号括弧の順序で構成されます。 スペースは使用できません。
  • 終了タグは、タグの始まりを示す不等号括弧、スラッシュ、キー名、タグの終わりを示す不等号括弧の順序で構成されます。 スペースは使用できません。
  • すべてのキーは大文字と小文字を区別し、search_args パラメーター内で一度だけ指定できます。
  • 複数のキーの順序は重要ではありません。

無効な key- のペアの場合、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_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>')
以下の例は、key-value の組を search_args パラメーターで使用する方法を示しています。
  1. すべての ROW および TABLE ロックを検索するには、次のようにします。
    CLOB('<lock_object_type>Table:Row</lock_object_type>')
  2. 表 T1 を参照し、ユーザー USER1 によって作成された、アプリケーション・ハンドル 123 が保持している (または取得待機中の) すべてのロックを検索するには、次のようにします。
    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>')
member
どのメンバーのデータが戻されるかを指定する、タイプ 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. 次のように MON_GET_LOCKS 表関数を呼び出してロックのホルダーを判別します。その際、検索引数としてロック名 0x00030005000000000280000452 を指定します。
    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_OCCURRENCES または WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES 表関数を呼び出すことができます。

戻される情報

表 1. MON_GET_LOCKS 表関数によって戻される情報
列名 データ・タイプ 説明またはモニター・エレメント
APPLICATION_HANDLE BIGINT application_handle - アプリケーション・ハンドル

LOCK_STATUS 列が G である場合、これはロックを現在保持しているアプリケーションを表します。

LOCK_STATUS 列が W または C である場合、これはロックの取得を現在待機しているアプリケーションを表します。

値が 0 の場合は、そのようなアプリケーションが存在しないことを表します。 システムの異常終了後に未完了トランザクションがデータベースに残っていると、その値になることがあります。 その場合は、ロールバックされるトランザクションまたは解決が必要な未確定トランザクションのいずれかがロックを保持しています。

メンバー 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 表スペース ID

表スペースを参照しないロックの場合、NULL 値が戻されます。

TAB_FILE_ID BIGINT table_file_id 表ファイル ID