Page History
18.8.1 ロックのタイムアウトを構成
ロックのタイムアウトのタイプ
SQLトランザクションが別のプロセスからロックが入力されるのを待つ場合、タイムアウトを設定する方法は2つあります。次の2つの方法です。
- (Linux上ではなく) Windows および IBM i 上 でサポートされた 接続ロックのタイムアウト はすべてのLANSA開発データベースに設定できます。SQLサーバー、OracleおよびSybase はすべてのLANSA開発データベースに設定できます。SQLサーバー、OracleおよびSybase Adaptive Server Anywhereは、各接続ごとにタイムアウトを設定し、その接続上で発生するすべてのロックがコントロールをアプリケーションに返せるようにします。
- Linux上のOracleについては、別のテクニックが必要です。この環境において、待ち時間はLANSAが更新または削除を実行する前に選択上で設定できます。これは ステートメント・ロックのタイムアウト と呼ばれます。LANSAは、Windows対応のOracle上でのこの設定もサポートするため、アプリケーションが、WindowsまたはLinuxのどちらで実行される場合でも、一貫したタイムアウト・ふるまいを期待することができます。
| Anchor | ||||
|---|---|---|---|---|
|
接続ロックのタイムアウトには、タイムアウトまでの待ち時間を、X_DBMENV.DAT内でLOCK_TIMEOUTで設定することが必要です。ゼロ値は永久に待たなければならないことを表示し、LANSAはタイムアウト・エラーをトラップできません。これは、下位互換性のために用意されています。省略値はゼロです。計測の単位は、データベースのタイプによって異なります。これは X_DBMENV.DAT内のコメントで言及されています。例えば、SQLサーバーはミリ秒単位でのタイムアウトの指定を要求し、MySQLは秒単位での指定を要求します。
...
LOCK_TYPE=C
LOCK_TIMEOUT=2
CMD_LOCK_TIMEOUT=<setting ignored>
DBMS_RETCODE_ROW_LOCKED=1013
...
| Anchor | ||||
|---|---|---|---|---|
|
ステートメント・ロックのタイムアウトはOracle固有のタイムアウトです。WindowsとLinux Oracle上で、同じロックのタイムアウトのふるまいを可能にします。
...
LOCK_TYPE=S
LOCK_TIMEOUT=2
CMD_LOCK_TIMEOUT=FOR UPDATE NOWAIT
DBMS_RETCODE_ROW_LOCKED=54
| Anchor | ||||
|---|---|---|---|---|
|
WindowsおよびLinuxサーバーでは、クライアントとサーバーは、サーバーで使用されているデータベースタイプの x_dbmenv.dat 内で同じタイムアウト設定になっていなければなりません。 (LOCK_TYPE、LOCK_TIMEOUT、CMD_LOCK_TIMEOUT、DBMS_RETCODE_ROW_LOCKED) 設定が異なる場合、 *DBMS_RECORD_LOCKED から Y が返ってくるはずの時に N が返されることがあります。