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

SAP Sybase SQL Anywhere 16.0 » SQL Anywhere サーバ SQL の使用法 » トランザクションと独立性レベル » ロックの仕組み

 

ロックの種類

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

  • スキーマロック   スキーマを変更できる機能を制御します。たとえば、テーブルの構造を変更するために新しいカラムを挿入するトランザクションはテーブルをロックして、他のトランザクションがスキーマの変更による影響を受けないようにできます。このような場合は、他のトランザクションのアクセスを制限してエラーを回避することが不可欠です。

  • ローロック   ローレベルで同時実行しているトランザクション間で一貫性を実現するために使用されます。たとえば、トランザクションは特定のローをロックして、他のトランザクションがそのローを変更しないようにできます。また、ローを修正するためにロックするのであれば、そのローに書き込みロックを設定する必要があります。同時実行性を最大化するために、ローのキーとキーではない部分を別々にロックできます。ローのキーではないカラムを更新しても、そのローを参照する外部ローの挿入と削除は妨げられません。

  • テーブルロック   テーブルレベルで同時実行しているトランザクション間で一貫性を実現するために使用されます。たとえば、LOCK TABLE ... IN EXCLUSIVE MODE または REFRESH MATERIALIZED VIEW ... WITH EXCLUSIVE MODE 文を実行すると、排他テーブルロックを取得します。

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

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

 ロック期間