排他的隔離レベル
SET TRANSACTION へ戻る
はじめに
テーブルのオンライン認識を実行するツールは、その機能を実行する際、テーブルに一時的に排他アクセスする必要があります。トランザクションは、排他テーブル アクセスを使用することで、ターゲットのテーブルに対する排他ロックを取得することができ、そのテーブルに対して、SELECT
、INSERT
、UPDATE
、DELETE
を実行できる唯一のものとなることができます。トランザクションが排他ロックを取得すると、ロックを要求している他のトランザクションは、そのロックが解放されるか、共用レベルまでダウングレードするまで、待たなければなりません。排他テーブル アクセスを保持するトランザクションは、他のトランザクションから干渉されることなく、テーブル上のデータを変更することができます。この排他レベルは、他のトランザクションにテーブルからの選択を許可しないため、TABLE STABILITY
や PROTECTED
のアクセスとは異なります。
用途
SET TRANSACTION
文を使用すると TABLE EXCLUSIVITY
句を指定することができ、また、既存の RESERVING
句を使用すると、1 つ以上のテーブルへの排他アクセスを要求することができます。TABLE EXCLUSIVITY
は、トランザクションが文の実行中にアクセスする、すべてのテーブルへの排他アクセスを取得します。RESERVING
句は、トランザクション開始時にテーブルのリストへの排他アクセスを取得します。RESERVING
句を使用するには、FOR <table_list> EXCLUSIVE [READ
と指定します。READ
と WRITE
間に違いがない点に注意してください。なぜなら、両モデルとも、他のトランザクションにテーブルへのアクセスを許可しないからです。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
は、それら機能を実行するために、排他テーブル アクセスを取得します。