Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データベースの作成 » トランザクションと独立性レベルの使用 » ロックの仕組み

 

ロック情報の取得

データベースのロックの問題を診断するために、ロックされているローの内容を調べると役に立つ場合があります。データベースで現在保持されているロックを確認するには、sa_locks システム・プロシージャ、または Sybase Central の [テーブル・ロック] タブを使用します。どちらの方法でも、ロックを保持している接続、ロックの期間、ロックの種類などの必要な情報を得ることができます。

注意

データベースのロックは一時的なものであるため、Sybase Central で参照できるローや sa_locks システム・プロシージャによって返されるローは、クエリの完了時にはすでに存在しません。

Sybase Central を使用したロックの表示

ロックは Sybase Central で表示できます。左ウィンドウ枠のデータベースを選択し、右ウィンドウ枠の [テーブル・ロック] タブをクリックします。このタブでは、それぞれのロックに対する接続 ID、ユーザ ID、テーブル名、ロック・タイプ、ロック名が表示されます。

sa_locks システム・プロシージャを使用したロックの表示

sa_locks システム・プロシージャの結果セットには、ロックが参照するテーブルのローを識別できる row_identifier カラムが含まれます。ロックされたローに格納されている実際の値を判断するために、ジョイン述部でテーブルの rowID を使用して、sa_locks システム・プロシージャの結果を特定のテーブルにジョインできます。次に例を示します。

SELECT S.conn_id, S.user_id, S.lock_class, S.lock_type, E.* 
  FROM sa_locks() S JOIN Employees E WITH( NOLOCK ) 
     ON RowId(E) = S.row_identifier 
  WHERE S.table_name = 'Employees';
注意

NOLOCK テーブル・ヒントを指定する必要はない場合があります。ただしクエリが 0 以外の独立性レベルで発行された場合、ロックが解放されるまでこのクエリがブロックされることがあり、この確認方法の便利さは低下してしまいます。

参照

sa_locks システム・プロシージャの詳細については、sa_locks システム・プロシージャを参照してください。

NOLOCK テーブル・ヒントの詳細については、FROM 句を参照してください。

ROWID 関数の詳細については、ROWID 関数 [その他]を参照してください。