排他的隔離レベル

提供: InterBase

SET TRANSACTION へ戻る


はじめに

テーブルのオンライン認識を実行するツールは、その機能を実行する際、テーブルに一時的に排他アクセスする必要があります。トランザクションは、排他テーブル アクセスを使用することで、ターゲットのテーブルに対する排他ロックを取得することができ、そのテーブルに対して、SELECTINSERTUPDATEDELETE を実行できる唯一のものとなることができます。トランザクションが排他ロックを取得すると、ロックを要求している他のトランザクションは、そのロックが解放されるか、共用レベルまでダウングレードするまで、待たなければなりません。排他テーブル アクセスを保持するトランザクションは、他のトランザクションから干渉されることなく、テーブル上のデータを変更することができます。この排他レベルは、他のトランザクションにテーブルからの選択を許可しないため、TABLE STABILITYPROTECTED のアクセスとは異なります。

用途

SET TRANSACTION 文を使用すると TABLE EXCLUSIVITY 句を指定することができ、また、既存の RESERVING 句を使用すると、1 つ以上のテーブルへの排他アクセスを要求することができます。TABLE EXCLUSIVITY は、トランザクションが文の実行中にアクセスする、すべてのテーブルへの排他アクセスを取得します。RESERVING 句は、トランザクション開始時にテーブルのリストへの排他アクセスを取得します。RESERVING 句を使用するには、FOR <table_list> EXCLUSIVE [READ と指定します。READWRITE 間に違いがない点に注意してください。なぜなら、両モデルとも、他のトランザクションにテーブルへのアクセスを許可しないからです。TABLE STABILITY のように、この排他レベルが使用されているときには、ロック競合がさらに発生しやすく、待ち時間も増えます。isc_tpb_shared および isc_tpb_protected に加え、API レベルで isc_start_transaction() を呼び出す際には、トランザクション パラメータ ブロック(TPB)で isc_tpb_exclusive を使用して、排他テーブル アクセスを指定することができます。

要件と制約

  • テーブルにアクセスする文またはリクエストが 1 つ以上準備されていたとしても、排他テーブル アクセスを取得することは可能です。
  • テーブルにアクセスする文またはリクエストが 1 つ以上実行されていたとしても、それらがまだテーブルにアクセスしていない限り、排他テーブル アクセスを取得することは可能です。

移行に関わる問題

InterBase 2020 Update 6 より前では、isc_tpb_exclusive は使用できましたが、並列トランザクションによる選択アクセスを許可していました。InterBase 2020 Update 6 下では、トランザクションは、それらリーダーが終了し、排他アクセスを持つトランザクションが終了または排他ロックをダウングレードし、それに続くリーダーがブロックするまで、待たなければなりません。暗号化のためのp ALTER TABLE ... ALTER COLUMN および TRUNCATE TABLE は、それら機能を実行するために、排他テーブル アクセスを取得します。

次は: