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

 

スキーマ・ロック

スキーマ・ロックは、データベース・スキーマへの変更を直列化するため、またテーブルを使用するトランザクションがスキーマの変更による影響を受けないようにするために、使用されます。たとえばスキーマ・ロックを使用すると、別の接続上のオープン・カーソルでテーブルを読み取り中に、ALTER TABLE 文によってそのテーブルからカラムが削除されるのを防ぐことができます。

スキーマ・ロックには、2 つのクラスがあります。

  • 共有ロック   テーブル・スキーマは共有 (読み込み) モードでロックされる。

  • 排他ロック   テーブル・スキーマは、単一接続の排他的使用のためにロックされる。

共有スキーマ・ロックは、トランザクションがデータベース内のテーブルを直接的または間接的に参照するときに取得されます。共有スキーマ・ロックは他の共有スキーマ・ロックと競合しません。同時に同じテーブルで共有ロックを取得できるトランザクションの数に制限はありません。共有スキーマ・ロックは、トランザクションが COMMIT または ROLLBACK で完了するまで保持されます。

共有スキーマ・ロックを保持する接続は、変更が他の接続と競合しない場合に、テーブル・データを変更できます。

排他スキーマ・ロックは、テーブルのスキーマが修正されるときに取得されます。スキーマは、通常は DDL 文を使用して修正されます。修正前にテーブルで排他ロックを取得する DDL 文には、ALTER TABLE 文などがあります。あるテーブルに対して一度に 1 つの接続だけが、排他スキーマ・ロックを取得できます。他のすべての接続は、テーブルのスキーマをロック (共有または排他) しようとしても、ブロックされるかエラーで失敗します。つまり、独立性レベル 0 (最も制限が少ない独立性レベル) で実行している接続は、スキーマが排他モードでロックされたテーブルからローを読み取ろうとするとブロックされます。

テーブル・スキーマの排他ロックを保持する接続のみがテーブル・データを変更できます。