ロックと並行性 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/vnq1596660420420.ditamap
dita:ditavalPath
ja-JP/vnq1596660420420.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

DML SELECTにより、セッション分離レベル(以下のテーブルを参照)およびLock Managerが課すロック レベルまたはLOCKING修飾子を使用して指定するロック レベルに基づいて、SELECT文で参照されるテーブルまたは行にデフォルトでREADロックがかけられます。LOCKINGリクエスト修飾子を参照してください。SELECT文でビューを参照する場合には、基礎となるテーブルごとにREADロックが設定されます。

このトピックは、オブジェクト定義文でSELECTサブクエリーをネストするCREATE JOIN INDEXやCREATE VIEWなどのDDL文には該当しません。

外側のSELECT文およびSELECTサブクエリーが、DELETE、INSERT、MERGE、またはUPDATE文を使ってデータを操作するDML文内にネストされていない場合、セッション トランザクションの分離レベルがSERIALIZABLEであっても、デフォルト値のロック重大度は常にREADです。

セッション トランザクションの分離レベルがREAD UNCOMMITTEDで、DBS制御フィールドAccessLockForUncomReadがTRUEに設定されている場合、SELECT操作のデフォルト値のロック レベルは、以下の段落とテーブルで説明する要因によって決まります。

以下のテーブルに示すように、SELECTサブクエリーが、DELETE、INSERT、MERGE、またはUPDATE文を使ってデータを操作するDML文内にネストされている場合、DBS制御フィールドAccessLockForUncomReadがTRUEで、そのセッションのトランザクションの分離レベルがREAD UNCOMMITTEDならば、デフォルト値のロック重大度はACCESSです。

トランザクションの分離レベル DBS制御AccessLockForUncomReadフィールド設定 外部SELECTと通常のSELECTサブクエリー操作におけるデフォルト値のロック重大度 DELETE、INSERT、MERGE、UPDATEの各文に埋め込まれたSELECT操作におけるデフォルト値のロック重大度
SERIALIZABLE FALSE READ READ
TRUE READ
READ UNCOMMITTED FALSE READ
TRUE ACCESS

SELECT文ではLOCKING修飾子を指定せずに、テーブルのアクセスに使用するビューでLOCKING修飾子を指定すると、データベースはビューで指定したロックを設定し、上のテーブルで説明したデフォルト値には従いません。

例えば、以下のビューを作成すると仮定します。

     CREATE VIEW access_view (a, b) AS
     LOCKING TABLE accntrec FOR ACCESS
     SELECT accntno, qualifyaccnt
     FROM accntrec
     WHERE qualifyaccnt = 1587;

指定されたセッション分離レベルおよびAccessLockForUncomReadフィールドの設定に関係なく、このSELECT文によりaccntrecテーブルにはACCESSロックが設定されます。

     SELECT a, b
     FROM access_view;

詳細については、Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144のSET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVELを参照してください。