データベース内のすべてのロックを表示します。
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 (意図的ロック) Write (書き込みロック) Surrogate (代理ロック) |
ローの読み取りロックは、短期のロック (独立性レベル 1 でスキャン) にするか、高い独立性レベルの長期ロックにできます。lock_duration カラムは、カーソル安定性 (Position) のために読み取りロックが短期か、COMMIT/ROLLBACK (Transaction) まで保持される長期かを指定します。ローのロックは、常に特定のローに保持されます。この 8 バイトのロー識別子は、row_identifier カラムの 64 ビット整数値としてレポートされます。代理ロックは、ロー・ロックの特殊な場合です。代理ロックは、代理エントリで保持されます。代理エントリは、参照整合性のチェックが表示されるときに作成されます。挿入時のロックを参照してください。テーブルで作成されるすべての代理エントリについて一意な代理ロックはありません。ただし、代理ロックは、指定した接続で指定されるテーブルで作成される代理エントリのセットに対応します。row_identifier 値は、代理ロックに関連付けられているテーブルと接続ごとに一意です。ロー・ロックを参照してください。 |
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 権限が必要です。
なし
このシステム・プロシージャの例、および返される情報量を増やすためのヒントについては、ロック情報の取得を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |