データベース内のすべてのロックを表示します。
sa_locks( [ connection [ , creator [ , table_name [ , max_locks ] ] ] ] )
connection 接続 ID 番号を指定する INTEGER パラメーター。プロシージャーは、指定された接続に関するロック情報のみを返します。デフォルト値は 0 (NULL) で、この場合は全接続の情報が返されます。
creator ユーザー ID を指定する CHAR(128) パラメーター。プロシージャーは、指定されたユーザーが所有するテーブルに関する情報のみを返します。creator パラメーターのデフォルト値は NULL です。このパラメーターが NULL に設定されている場合、sa_locks は次の情報を返します。
table_name パラメーターが指定されていない場合、データベースのすべてのテーブルに関するロック情報が返されます。
table_name パラメーターを指定すると、現在のユーザーが作成した、指定した名前を持つテーブルのロック情報が返されます。
table_name テーブル名を指定する CHAR(128) パラメーター。プロシージャーは、指定されたテーブルに関するロック情報のみを返します。デフォルト値は NULL で、この場合はすべてのテーブルの情報が返されます。
max_locks 情報が返されるロックの最大数を指定する INTEGER パラメーター。デフォルト値は 1000。値が -1 の場合は、すべてのロック情報が返されます。
カラム名 | データ型 | 説明 |
---|---|---|
conn_name | VARCHAR(128) | 現在の接続の名前。 |
conn_id | INTEGER | 接続 ID 番号。 |
user_id | CHAR(128) | 接続のユーザー ID。 |
table_type | CHAR(6) | テーブルのタイプ。タイプは、テーブルの場合は BASE、グローバルテンポラリテーブルの場合は GLBTMP、マテリアライズドビューの場合は MVIEW です。 |
creator | VARCHAR(128) | テーブルの所有者。 |
table_name | VARCHAR(128) | ロックが保持されているテーブル。 |
index_id | INTEGER | インデックス ID または NULL。 |
lock_class | CHAR(8) | ロッククラス。Schema、Row、Table、または Position のいずれか。 |
lock_duration | CHAR(11) | ロックの継続期間。Transaction、Position、Connection のいずれか。 |
lock_type | CHAR(9) | ロックの種類 (これはロッククラスとは関係ありません)。 |
row_identifier | UNSIGNED BIGINT | ローの識別子。8 バイトのロー識別子または NULL です。 |
sa_locks プロシージャーは、データベース内の全ロックの情報で構成される結果セットを返します。
lock_type カラムの値は、lock_class カラムのロック分類によって変わります。次の値が返されます。
ロッククラス | ロック種類 | コメント |
---|---|---|
Schema |
Shared (共有スキーマロック) Exclusive (排他スキーマロック) |
スキーマロックの場合、row_identifier とインデックス ID 値は NULL です。 |
Row |
Read (読み取りロック) Intent (意図的ロック) ReadPK (読み取りロック) Write (書き込みロック) WriteNoPK (書き込みロック) Surrogate (代理ロック) |
ローの読み取りロックは、短期のロック (独立性レベル 1 でスキャン) にするか、高い独立性レベルの長期ロックにできます。lock_duration カラムは、読み取りロックがカーソル安定性 (Position) のために短期になるか、COMMIT/ROLLBACK (Transaction) まで保持される長期になるかを指定します。ローのロックは、常に特定のローに保持されます。この 8 バイトのロー識別子は、row_identifier カラムの 64 ビット整数値としてレポートされます。代理ロックは、ローロックの特殊な場合です。代理ロックは代理エントリで保持されます。代理エントリは、参照整合性のチェックが遅延するときに作成されます。 テーブルで作成されるすべての代理エントリについてユニークな代理ロックはありません。ただし、代理ロックは、指定した接続で指定されるテーブルで作成される代理エントリのセットに対応します。row_identifier 値は、代理ロックに関連付けられているテーブルと接続ごとにユニークです。 必要に応じて、ローのキーとキーではない部分を別々にロックできます。1 つの接続で共有 (読み取り) アクセス用にローのキー部分に対する読み取りロックを取得して、他の接続でローのキーではない他のカラムに対する書き込みロックを取得できるようにできます。ローのキーではないカラムを更新しても、そのローを参照する外部ローの挿入と削除は妨げられません。 |
Table |
Shared (共有テーブルロック) Intent (テーブルロックを更新する意図) Exclusive (排他テーブルロック) |
テーブルロックを参照してください。 |
Position |
Phantom (幻ロック) Insert (挿入ロック) |
通常、位置ロックも特定のローに保持され、そのローの 64 ビットロー識別子は結果セットの row_identifier カラムに表示されます。ただし、row_identifier カラムが NULL の場合、Position ロックは、全体のスキャン (インデックススキャン、または逐次スキャン) に保持されます。 |
位置ロックは、逐次テーブルスキャンまたはインデックススキャンと関連付けられます。index_id カラムは、位置ロックが逐次スキャンに関連付けられているかどうかを示します。逐次スキャンのために位置ロックを保持する場合、index_id カラムは NULL です。位置ロックが特定のインデックススキャンの結果として維持される場合、そのインデックスのインデックス識別子は、index_id カラムにリストされます。インデックス識別子は、SYSIDX ビューを使用して表示できる ISYSIDX システムテーブルのプライマリキーに対応します。位置ロックがすべてのインデックスのスキャンで保持される場合、インデックス ID 値は -1 です。
DBA 権限。
なし。
このシステムプロシージャーの例と返される情報量を増やすためのヒントについては、ロック情報の取得方法を参照してください。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |