スキーマロックは、データベーススキーマへの変更を直列化するため、またテーブルを使用するトランザクションがスキーマの変更による影響を受けないようにするために、使用されます。たとえばスキーマロックを使用すると、別の接続上のオープンカーソルでテーブルを読み取り中に、ALTER TABLE 文によってそのテーブルからカラムが削除されるのを防ぐことができます。
スキーマロックには、2 つのクラスがあります。
共有ロック テーブルスキーマは共有 (読み込み) モードでロックされる。
排他ロック テーブルスキーマは、単一接続の排他的使用のためにロックされる。
共有スキーマロックは、トランザクションがデータベース内のテーブルを直接的または間接的に参照するときに取得されます。共有スキーマロックは他の共有スキーマロックと競合しません。同時に同じテーブルで共有ロックを取得できるトランザクションの数に制限はありません。共有スキーマロックは、トランザクションが COMMIT または ROLLBACK で完了するまで保持されます。
共有スキーマロックを保持する接続は、変更が他の接続と競合しない場合に、テーブルデータを変更できます。
排他スキーマロックは、テーブルのスキーマが修正されるときに取得されます。スキーマは、通常は DDL 文を使用して修正されます。修正前にテーブルで排他ロックを取得する DDL 文には、ALTER TABLE 文などがあります。あるテーブルに対して一度に 1 つの接続だけが、排他スキーマロックを取得できます。他のすべての接続は、テーブルのスキーマをロック (共有または排他) しようとしても、ブロックされるかエラーで失敗します。つまり、独立性レベル 0 (最も制限が少ない独立性レベル) で実行している接続は、スキーマが排他モードでロックされたテーブルからローを読み取ろうとするとブロックされます。
テーブルスキーマの排他ロックを保持する接続のみがテーブルデータを変更できます。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |