Symfoware Serverでは、資源を占有する単位として、以下の3種類をサポートしています。
DSI(パーティション)
ページ
行(レコード)
DSI(パーティション)が最大の単位であり、次にページ、最小の単位は行(レコード)となります。
排他について、以下に説明します。
推奨する排他の単位
業務ごとに推奨する排他の単位を、以下に示します。
業務  | 排他の単位  | 
|---|---|
大量データ参照系業務  | ページまたはDSI  | 
バッチ業務  | |
オンライン業務  | 行  | 
大量データ参照系業務やバッチ業務は、他トランザクションと排他を取る必要性がない、または他トランザクションの影響を受けることはほとんどありません。そのため、排他の単位はページが適しています。DSI(パーティション)を設定することもできます。
オンライン業務は、複数トランザクションの競合が起きるため、排他の単位は最小単位である行が適しています。行単位で排他を設定することを、レコードロックといいます。
排他の設定についての詳細は、“アプリケーション開発ガイド(共通編)”を参照してください。
トランザクションモードの設定を変更することによって、トランザクションの同時実行性を高めたり、トランザクションで扱うデータの整合性を高めたりして、トランザクションの競合を制御することができます。トランザクションモードの設定はトランザクションの単位で制御することができます。しかし、トランザクションは一連のデータ操作の一貫性を保証する単位であり、1つのトランザクションでは複数のSQL文が実行されます。
Symfoware Serverでは、SQL文ごとに占有モードを設定することで、トランザクションモードの設定よりも詳細に排他の強さや同時実行性を制御することができます。これをイルシデーションロックといいます。
イルシデーションロックの占有モード指定におけるトランザクション制御について、以下に示します。
占有モード指定  | 排他の強さ  | 同時実行性  | 
|---|---|---|
EXCLUSIVE LOCK  | 更新用のロックです。非共有モードでデータベース資源を占有します。  | データベースの更新に対応します。他トランザクションから参照または更新することができません。  | 
SHARE LOCK  | 参照用のロックです。共有モードで、トランザクションの終了までデータベース資源を占有します。  | SERIALIZABLEまたはREPEATABLE READでの参照に対応します。他トランザクションから参照することはできますが、更新することはできません。  | 
FREE LOCK  | 参照用のロックです。共有モードのデータベース資源を占有します。SQL文が終了すると占有を解除します。  | READ COMMITTEDでの参照に対応します。SQL文の実行が終了すると、他トランザクションから更新することができます。  | 
NO LOCK  | ロックを獲得しません。  | READ UNCOMMITTEDに対応します。他トランザクションから参照または更新することができます。  | 
イルシデーションロックは、参照と参照は常に同時に実行できます。更新と更新は、同時に実行できません。トランザクション間の制御について、以下に示します。
図4.4 トランザクション間の制御

イルシデーションロックによる参照と更新の同時走行について、以下に示します。
図4.5 参照と更新の同時走行

“SHARE LOCK”では、自トランザクションが参照したデータは、他トランザクションは更新することができません。
“FREE LOCK”、“NO LOCK”では、自トランザクションが参照したデータは、他トランザクションは更新することができます。
“SHARE LOCK”、“FREE LOCK”では、自トランザクションは、他トランザクションが更新したデータを参照することができませんが、“NO LOCK”では、他トランザクションが更新したデータ(COMMIT未のデータ)を参照することができます。
イルシデーションロックの効果は、“5.1.2 アクセス性能の保証”を参照してください。
占有待ちの有無
トランザクション間で資源(行、ページ、DSI)に対して競合が発生した場合、その時点で占有待ちに入る(資源が解放されるまで待つ)か、アプリケーションに復帰するかを指定できます。
占有待ちを行うか、アプリケーションに復帰するかの選択は、クライアント用の動作環境ファイルの実行パラメタで指定できます。