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 表関数です。
スキーマは 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 パラメーターで使用する方法を示しています。- すべての ROW および TABLE ロックを検索するには、次のようにします。
CLOB('<lock_object_type>Table:Row</lock_object_type>')
- 表 T1 を参照し、ユーザー USER1 によって作成された、アプリケーション・ハンドル 123 が保持している (または取得待機中の) すべてのロックを検索するには、次のようにします。
CLOB('<application_handle>123</application_handle> <table_schema>USER1</table_schema> <table_name>T1</table_name>')
- 共有モードで現在保持されているすべての 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_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 がリモート・メンバーで保持されていることを示しています。
- 次のように 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 表関数を呼び出すことができます。
戻される情報
列名 | データ・タイプ | 説明またはモニター・エレメント |
---|---|---|
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_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 |