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 の使用法 » データベースの作成 » トランザクションと独立性レベルの使用 » ロックの仕組み

 

ロックできるオブジェクト

データベースの一貫性を実現し、トランザクション間で適切な独立性レベルをサポートするために、SQL Anywhere では次の種類のロックを使用します。

  • スキーマ・ロック   スキーマを変更できる機能を制御します。たとえば、トランザクションはテーブルのスキーマをロックして、他のトランザクションがそのテーブルの構造を変更しないようにできます。

  • ロー・ロック   ロー・レベルで同時実行しているトランザクション間で一貫性を実現するために使用されます。たとえば、トランザクションは特定のローをロックして、他のトランザクションがそのローを変更しないようにできます。また、ローを修正するためにロックするのであれば、そのローに書き込みロックを設定する必要があります。

  • テーブル・ロック   テーブル・レベルで同時実行しているトランザクション間で一貫性を実現するために使用されます。たとえば、テーブルの構造を変更するために新しいカラムを挿入するトランザクションはテーブルをロックして、他のトランザクションがスキーマの変更による影響を受けないようにできます。このような場合は、他のトランザクションのアクセスを制限してエラーを回避することが不可欠です。

  • 位置ロック   テーブルの逐次スキャンまたはインデックス・スキャンにおける一貫性を実現するために使用されます。通常、トランザクションは、インデックスによって指定された順序に従ってローをスキャンするか、ローを逐次スキャンします。いずれの場合も、スキャン位置にロックをかけることができます。たとえば、インデックスにロックをかけると、別のトランザクションが特定の値や値の範囲を持つローを挿入しないようにできます。

スキーマ・ロックには、スキーマの変更によって、実行中のトランザクションに不注意に影響を与えないようにするメカニズムが備わっています。ロー・ロック、テーブル・ロック、位置ロックのそれぞれには独自の目的がありますが、これらは相互に機能します。それぞれの種類のロックは、特定の矛盾を防ぎます。選択した独立性レベルに応じて、データベース・サーバはこれらのロックのいくつかまたはすべての種類を使用して必要な一貫性レベルを維持します。

ロック期間

ロックのクラスが異なると、保持される期間も異なることがあります。

  • 位置   特定のローにおける読み込みロックのような短期間のロックで、独立性レベル 1 でカーソルの安定性を実装するために使用される

  • トランザクション   トランザクションの終了まで保持されるロー・ロック、テーブル・ロック、位置ロック

  • 接続   WITH HOLD カーソルの使用時に作成されるスキーマ・ロックのように、トランザクションが終了しても保持されるスキーマ・ロック