16.20 - isolation_level - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ定義言語 構文規則および例

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-162K-JPN
Language
日本語 (日本)

現在のセッションで有効なデフォルト トランザクション分離レベル。

有効なトランザクション分離レベルは以下のとおりです。

RU
READ UNCOMMITTED
DBS制御パラメータAccessLockForUncomReadがTRUEに設定されている場合は、DELETE、INSERT、MERGE、UPDATEの各リクエストに組み込まれているSELECT操作に関する現行セッションの読み取り専用ロッキング強度をACCESSに設定します。そうでない場合、そうしたリクエストに関する読み取り専用ロッキング強度はREADのままになります。
DELETE、INSERT、UPDATEのいずれかのリクエストに組み込まれていない外部SELECTリクエストとSELECT subqueryの場合、読み取り専用ロッキング強度のデフォルト設定は常にREADになります。
トランザクションの分離レベルがREAD UNCOMMITTEDに設定されているときに、DELETE、INSERT、MERGE、UPDATEのいずれかのリクエストに組み込まれているSELECT操作に関する読み取り専用ロッキング強度がREADのままになるのは、DBS制御パラメータAccessLockForUncomReadの設定がFALSEの場合に限られます。
AccessLockForUncomReadがTRUEに設定されている場合、それらのリクエストに関するデフォルトの読み取りロッキング強度はACCESSになります。
RUとREAD UNCOMMITTEDは同義語です。
SR
SERIALIZABLE
非テンポラル テーブルに対して実行されるすべてのSELECTリクエスト(外部SELECTリクエストかSELECT subqueryかにかかわらず)に関する現行セッションの読み取り専用ロッキング強度を、DBS制御パラメータAccessLockForUncomReadの設定に関係なく、READに設定します。
トランザクションの分離レベルがSERIALIZABLEに設定されているかどうかにかかわらず、現在のセマンティクスを使用するDML操作またはCURRENT VALIDTIME修飾子を指定するDML操作で逐次性違反が発生する場合があります。いつ発生するか、発生する理由、およびその回避方法の詳細については、<Teradata Vantage™ テンポラル テーブル サポート、B035-1182>を参照してください。
SRとSERIALIZABLEは同義語です。
なお、トランザクションの分離レベルは、ロック レベルではなくロック重大度に影響するので注意してください(ロック重大度ロック レベルの詳細については<Teradata Vantage™ SQLリクエストおよびトランザクション処理、B035-1142>を参照)。

例: デフォルトのセッション分離レベルをREAD UNCOMMITTEDに設定

以下のリクエストはどちらも同じことで、現在のセッションの分離レベルをREAD UNCOMMITTEDに設定します。

     SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL RU;
     SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ
     UNCOMMITTED;

例: デフォルトのセッション分離レベルをSERIALIZABLEに戻す設定

以下のリクエストはどちらも同じことで、現在のセッションの分離レベルをSERIALIZABLEに戻します。

     SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SR;
     SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL
     SERIALIZABLE;

例: 失敗の条件

Teradataセッション モードでこの文には、構文および意味解釈ルーチン エラーの両方が失敗応答を返します。

次のリクエストは、SUが有効な分離レベルではないので、失敗応答を返します。

     SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SU;
     *** Failure 3706 Syntax error: expecting isolation level.

次のTeradataセッション モード トランザクションは、SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVELはDDL文であるのに、トランザクションの最後のリクエストではなく、明示的なトランザクションではDDL文の後に書ける有効な文はEND TRANSACTION、ABORT/ROLLBACK、またはNULL文だけであるので、失敗応答を返します。

     SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SR;
     SELECT * 
     FROM table_1;
     *** Failure 3932 Only an ET or null statement is legal after a DDL
     Statement.

ANSIセッション モードでは、これらのリクエストは、失敗ではなくエラーを返します。それからシステムによりエラーの発生したリクエストはロールバックされます。

このトランザクションは以下の3種類の方法で改訂できます。

  • 暗黙的トランザクションとしてTeradataセッション モードで単一文のリクエストとしてSET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVELリクエストを実行します。
  • SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVELリクエストを発行した直後に、以下のいずれかを使用してこのリクエストを含む明示的Teradataセッション モード トランザクションをコミットまたはロールバックします。
  • END TRANSACTION文。
  • ABORTまたはROLLBACK文。
  • SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVELリクエストを発行した直後に、以下のいずれかを使用してこのリクエストを含むANSIセッション モード トランザクションをコミットまたはロールバックします。
  • COMMIT文。
  • ABORTまたはROLLBACK文。