« FQDNはドキュソじゃないよ | トップページ | PostgreSQLの無停止メンテナンスツール »

2015.03.12

Informixでロックしているデータを読み取る

InformixではPostgreSQLとは異なり、分離レベルとしてはDirty Readなどもある。
しかしIDS11以降であれば、さらに良いオプションがあるのでメモり。

ロックを獲得しているレコードを読み取ろうとして、SQLエラー -243 ISAMエラー-154を食らったケースは数知れず。
Timeout Expiredである。
読み取りだけをしたいだけなのに待たされてしまうのである。これを回避するために IDS10以前であれば分離レベルをDirty Readとする方法が定番であった。
しかしDirty ReadはDirty Readであり、もしそのトランザクションがロールバックしてしまえば読み取ったデータはおかしな値となっていることもありえる。用途によっては注意が必要だった。
これに対して、COMMITED READに対して、追加オプションを使うことができるようになっていた。

SET ISOLATION TO COMMITED READ LAST COMMITTED;
肝はLAST COMMITTEDである。
このオプションをつけることで、対象レコードがロックしていてもSELECTであればそのロックより前の最新のコミットされたバージョンのデータを読み出すことができる。

もちろん、更新処理に対してはロックが有効になるのであくまでも読み取りだけの処理なのにーーというケースに対して有効だ。

ref)[IBM Knowledge Center]

おまけ。Informixでは本来のSERIALIZABLEレベルの分離レベルはREPEATABLE READとなっていて、ちょっとわかりづらい(^^;

|

« FQDNはドキュソじゃないよ | トップページ | PostgreSQLの無停止メンテナンスツール »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2022/61266777

この記事へのトラックバック一覧です: Informixでロックしているデータを読み取る:

« FQDNはドキュソじゃないよ | トップページ | PostgreSQLの無停止メンテナンスツール »