どのセッションの場合でも、初期のデフォルト トランザクション分離レベルはSERIALIZABLEです。この文脈では、これはいかなるセッションの場合でもデフォルトの読み取り専用ロッキング強度はREADだというのと同じことになります。これはすべてのSELECT操作に適用されます。スタンドアロンSELECTリクエストであるか、通常のSELECTSubquery であるか、あるいはDELETE、INSERT、またはUPDATEリクエスト内に埋め込まれたSELECTSubquery であるかには関係ありません。
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVELを使用すると、現行セッションのDELETEリクエスト、INSERTリクエスト、またはUPDATEリクエスト内に埋め込まれたSELECT操作のデフォルトの読み取り専用ロックの強度をACCESSに設定したり、ACCESSに設定した後にREADに戻すことができます。
つまり、セッション レベルの分離レベルをREAD UNCOMMITTEDに変更すると、DELETE、INSERT、MERGE、またはUPDATEリクエスト内に埋め込まれたすべてのSELECTリクエストのデフォルトの読み取り専用ロッキング強度に影響し、DBS制御フラグAccessLockForUncomReadの値がTRUEに設定されている場合のみ、デフォルトのロック強度がACCESSになることになります。AccessLockForUncomReadがFALSEに設定されている場合、それらのSELECT操作のデフォルトの読み取り専用ロッキング強度はREADです。
セッションのデータ操作リクエスト内に埋め込みSELECTリクエストのデフォルトのロック強度をREADからACCESSにダウングレードできるようにするには、READ UNCOMMITTEDを指定し、DBS制御フラグのAccessLockForUncomReadをTRUEに設定する必要があります。この状況でのデータ操作リクエストとは、任意のDELETEリクエスト、INSERTリクエスト、MERGEリクエスト、またはUPDATEリクエストです。
分離レベルの設定値 | DBS制御フラグAccessLockForUncomReadの設定値 | 結果 |
---|---|---|
READ UNCOMMITTED RU |
FALSE | 埋め込みSELECTリクエストのロック強度は、READからACCESSにダウングレードされない。 |
SERIALIZABLE SR |
TRUE |
次の表は、この情報を少し異なる方法で示したものです。
トランザクション分離レベル | DBS制御AccessLockForUncomReadフラグの設定 | 外部SELECTおよび通常SELECTSubquery 操作のデフォルトのロック強度 | DELETE、INSERT、MERGE、またはUPDATEリクエスト内に埋め込まれたSELECT操作のデフォルトのロック強度 |
---|---|---|---|
SERIALIZABLE | FALSE | READ | READ |
TRUE | READ | ||
READ UNCOMMITTED | FALSE | READ | |
TRUE | ACCESS |
デフォルト セッション分離レベルがSERIALIZABLEかREAD UNCOMMITTEDかに関係なく、最適化ルーチンは暗黙的に読み取り専用操作のロッキング レベル(行ハッシュ、ビュー、テーブルのいずれか)を指定することに注意してください。分離レベルはロッキング レベルではなくロッキング強度に影響します。
ロッキング レベルは、LOCKINGリクエスト修飾子を使用しないと明示的に指定できません。詳細については、Teradata Vantage™ - SQLデータ操作言語、B035-1146を参照してください。